2014-05-12 44 views
1

內同一枚舉類型的變量I具有低於類型分配枚舉(聲明一個結構內)的值的struct

struct enumStruct 
{ 
    enum Number 
    { 
     zero = 0, 
     one = 1 
    }; 

    Number t; 

    union 
    { 
     /* t = 0 */ 
     some_struct_zero zero; 
     /* t = 1 */ 
     some_struct_one one; 
    } un; 
} v_enumStruct; 

一個結構是否可以將值分配給v_enumStruct.t如下?

v_enumStruct.t = v_enumStruct.zero;//Option 1 

此外,下面似乎不工作

v_enumStruct.t = zero; //Option 2 - zero is mistaken as an unavailable variable name 
+0

我的猜測是「否」。你試過了嗎?編譯器認爲什麼? – unwind

+0

我嘗試過,選項1工作! – Aadishri

+1

如果有任何工作像你一樣在這裏展示,那麼很有可能你將它編譯爲C++而不是C。這是兩種不同的語言。 –

回答

1

1)zero不是struct成員。 2)struct裏面的enum沒有聲明任何成員。它可以在任何地方聲明。枚舉成員被命名爲常數,它們不是變量,3)Number需要enum預選賽:

struct enumStruct 
    { 
     enum Number 
     { 
      zero = 0, 
      one = 1 
     }; 
     enum Number t; 

     union 
     { 
     /* t = 0 */ 
     some_struct_zero zero; 
     /* t = 1 */ 
     some_struct_one one; 
     } un; 

} v_enumStruct; 

你還不如移動enum Number { ..};struct之外,因爲它是不是在做結構內部的任何物件。現在你應該可以指定:

v_enumStruct.t = zero; 
+0

但是零被認爲是枚舉值的權利?所以,理想情況下,結構內的枚舉應該可以全局使用嗎?參考:http://stackoverflow.com/questions/5902744/enum-in-a-struct-newbie-in-a-c – Aadishri

+0

作爲*成員sturct *的枚舉是好的。如果仔細查看鏈接的帖子,它會將'type'聲明爲struct MyStruct的成員。對你的代碼的等價修改是:'enum Number {zero = 0,one = 1} t;' –