我在全球范围内声明了这个结构,
struct a{
int a;
int x;
union b{
int a;
int b;
int y;
};
};
然后在main中声明了一个联盟,
union b a;
这并没有给出任何错误。但如果在结构定义中声明联合'a',例如:
struct a{
int a;
int x;
union b{
int a;
int b;
int y;
}a;
};
它给出错误“重复成员a”。 (我们在之前的案例中使用了同一个名字'a') 为什么一个工作而另一个不工作?
其次,我们如何独立地使用struct内部声明的union,但不能使用任何其他整数变量,比如'x'? 就像,我可以成功执行以下操作:
union b z; //works in this case, BUT not if we declare 'z' with the definition.
z.y=6; //works
x=6; //gives error
(我知道我们在main中声明了union,但是它在struct中的定义。就像struct.union.union_variable一样有意义,但是union.union_variable直接使它变得独立。不应该像对待它一样'X'?)
答案 0 :(得分:5)
它给出错误“重复成员a”。 (我们在以前的案例中使用了同一个名称'为什么一个人工作而另一个人不工作?
因为您的结构现在有两个名为a
的成员:第一个是int
,第二个是b
类型(您的union
)。如果不能编译,你不会感到惊讶:
struct a {
int a;
float a;
};
在你的情况下,你有完全相同的情况,你在b
之外定义了struct
的图像,你试着像这样使用它:
struct a {
int a;
union b a;
};
其次,我们如何独立地使用struct内部声明的union,但不能使用任何其他整数变量,比如'x'?就像,我可以成功执行以下操作:
x
在哪里宣布?您没有任何名为x
的局部变量(您可能拥有的是名为x
的结构成员,但您需要这样的结构)。以下之一(根据您的尝试):
int x = 6;
struct a w;
a.x = 6;