我在全球范围内宣布了这种结构,
struct a{
int a;
int x;
union b{
int a;
int b;
int y;
};
};
Run Code Online (Sandbox Code Playgroud)
然后在主要内部宣布一个联盟,
union b a;
Run Code Online (Sandbox Code Playgroud)
这并没有给出任何错误.但是如果在结构定义中声明联合'a',例如:
struct a{
int a;
int x;
union b{
int a;
int b;
int y;
}a;
};
Run Code Online (Sandbox Code Playgroud)
它给出错误"重复成员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
Run Code Online (Sandbox Code Playgroud)
(我知道我们在main中声明了union,但是它在struct中的定义.就像struct.union.union_variable有意义一样,但是union.union_variable直接使它变得独立.不应该把它当作'x'来对待?)
它给出错误"重复成员a".(我们在以前的案例中使用了同一个名称'为什么一个人工作而另一个人不工作?
因为你的结构现在有两个名为的成员a:第一个是第一个int,第二个是类型b(你的union).你不会惊讶地发现这不能编译:
struct a {
int a;
float a;
};
Run Code Online (Sandbox Code Playgroud)
在你的情况下你有完全相同的情况,你b在外面定义的成像struct,你尝试使用它像这样:
struct a {
int a;
union b a;
};
Run Code Online (Sandbox Code Playgroud)
其次,我们如何独立地使用struct内部声明的union,但不能使用任何其他整数变量,比如'x'?就像,我可以成功执行以下操作:
在哪里x申报?你没有任何名为的局部变量x(你可能拥有的是一个名为struct的成员,x但是你需要这样的结构).以下之一(根据您的尝试):
int x = 6;
struct a w;
a.x = 6;
Run Code Online (Sandbox Code Playgroud)