2014-05-13 53 views
0

我宣布这个结构在全球范围内,这个结构/联合声明有什么问题?

struct a{ 
int a; 
int x; 
union b{ 
int a; 
int b; 
int y; 
}; 
}; 

然后宣布里面主要的工会,

union b a; 

,这是不给任何错误。但是,如果在结构的定义中声明联合'a',如:

struct a{ 
int a; 
int x; 
union b{ 
int a; 
int b; 
int y; 
}a; 
}; 

它给出错误“重复的成员a”。 (我们在以前的案例中使用了'a') 为什么一个人工作,另一个不工作?

其次,我们怎样才能独立使用在struct中声明的联合,但不能使用任何其他整数变量,比如'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 

(我的理解我们宣布里面主要的工会,但其在结构里面定义一样,struct.union.union_variable是有道理的,但有union.union_variable。直接让它变得独立,不应该像'x'一样对待)

+5

因为将联合声明为'a',使它成为结构a中的另一个成员,它已经有一个名为'a'的成员? –

回答

5

它给出错误“重复的成员a”。 (我们在以前的案例中使用了相同的名称'a')为什么一个工作而另一个不工作?

因为你的结构现在已经两个成员名为a:第一个是int和第二个是b类型(您union)的。你不会惊讶地看到,这并不编译:

struct a { 
    int a; 
    float a; 
}; 

你的情况,你有完全一致的情况下,成像你定义bstruct和您尝试使用这样的:

struct a { 
    int a; 
    union b a; 
}; 

其次,我们如何才能独立地使用struct内部声明的联合,但不能使用任何其他整数变量,比如'x'?喜欢,我可以成功地执行以下操作:

xx哪里声明?您没有任何名为x的本地变量(您可能拥有的是名为x的结构成员,但您需要这样的结构)。以下之一(根据你想要做什么):

int x = 6; 
struct a w; 
a.x = 6; 
+0

但是,我要求我们没有独立宣布工会。就像我们有'x'一样,我们把它放在struct里面。为什么可以像这样使用联合(就好像它不在任何结构内部,而是独立声明)? – nishantbhardwaj2002

+0

@ user3340994你问1)还是2)? 1),因为用这种语法你不仅定义了一个联合,而且还定义了一个这种类型的变量。 2)你可以使用一个与struct/union成员同名的整型变量,但你必须_declare_它。 –

+0

我在问关于(2) – nishantbhardwaj2002