2014-05-13 95 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