【发布时间】:2010-05-10 23:31:45
【问题描述】:
我有 2 个结构,它们 90% 的字段相同。我想将这些字段分组到一个结构中,但我不想使用点运算符来访问它们。原因是我已经使用第一个结构进行了编码,并且刚刚创建了第二个。
之前:
typedef struct{
int a;
int b;
int c;
object1 name;
} str1;
typedef struct{
int a;
int b;
int c;
object2 name;
} str2;
现在我要创建第三个结构:
typedef struct{
int a;
int b;
int c;
} str3;
并将 str1 和 atr2 更改为:
typedef struct{
str3 str;
object1 name;
} str1;
typedef struct {
str3 str;
object2 name;
} str2;
最后我希望能够通过以下方式访问 a、b 和 c:
str1 myStruct;
myStruct.a;
myStruct.b;
myStruct.c;
而不是:
myStruct.str.a;
myStruct.str.b;
myStruct.str.c;
有没有办法做这样的事情。这样做的原因是,如果发生对结构的更改,我希望保持数据的完整性,并且不要重复自己,也不必更改我现有的代码,也不要让字段嵌套得太深。
已解决:感谢您的所有回答。这样做以便我可以使用自动完成的最后一种方法如下:
struct str11
{
int a;
int b;
int c;
};
typedef struct str22 : public str11
{
QString name;
}hi;
【问题讨论】:
-
你的代码对我来说是零意义的。
str3不是类型,而是对象。声明str3 str毫无意义。当你声明结构时,说struct str3 { ... };而不是struct { ... }str3; -
这就是为什么你没有找到答案,但其他人都找到了。
-
来自维基百科:typedef 是 C 和 C++ 编程语言中的关键字。 typedef 的目的是为现有类型分配替代名称。来自我:我猜它毕竟是一种类型,这取决于姜黄。
-
你在哪里看到 typedef?您上面的代码创建了两个匿名类型,并为它们创建变量 str1 和 str2 实例(然后对 str3 再次执行相同操作)。如果您要尝试攻击评论者,至少要让您的事实正确。
-
人们对您的主题做出反应的“攻击”是怎么回事? @Wilhelm/dash/Maciej