2013-06-21 89 views
4

後我聲明C++枚舉語法

enum color {red, blue, green}; 

在那裏

color a=blue; 

enum color a=blue; 
+3

更多C的東西,真的。這與'struct'的處理方式相同。 – chris

+0

'color a = blue;'如果你做了類似''enum color {blue} color;''的話''不起作用。在這種情況下,你需要'enum color a = blue;'來區分對象和類型。當然,你不應該以這種方式重載枚舉名稱。 – bames53

回答

9
enum MyEnumType { ALPHA, BETA, GAMMA }; 

enum MyEnumType x; /* legal in both C and C++ */ 
MyEnumType y;  // legal only in C++ 

enum { HOMER, MARGE, BART, LISA, MAGGIE }; 
2

在C語言之間的任何差異(相對於C++),要創建一個名稱color,您必須鍵入typedef enum scolor {red, blue, green} color;,或者使用定義的問題包含,使用enum colour a = blue; - 否則,編譯器將不知道什麼color是。

在C++中,任何struct Xclass Y,或enum Z,將自動別名Xstruct XY作爲class YZ作爲enum Z - 從而減少了需要typedef struct X X;等(儘管這仍然是有效的,因爲C++是,作爲一個整體,向後兼容C)。

這兩種形式在C++中同樣有效。這是你喜歡的風格問題。

5

假設沒有其他聲明color可用,它們意味着同樣的事情。但是,提供color的不同定義是有效的,並且enum color可用於確保使用該類型。

enum color { red, blue, green }; 
color color(const char *); 
enum color a = red; 

在第二行,指定返回類型color是有效的,並且是指enum color。在第三行,enum關鍵字是必需的,因爲color否則會引用第二行中聲明的函數。

但實際上,enum colorcolor幾乎意味着同樣的事情。

+0

嗨我試過你的代碼,但得到一個錯誤:錯誤:鍵入'main():: color'沒有連接用於聲明函數'main():: color color(const char *)'with linkage [-fpermissive] | 。我不知道它是什麼意思。 – focusHard

+0

@focusHard:將函數定義移到main(https://ideone.com/RgWBZx)之外:http://stackoverflow.com/questions/16053148/type-with-no-linkage-used-to-declare-function -with-linkage – Bill

+0

@focusHard你把它放在一個函數中,在這種情況下'enum color'是一個函數本地類型,它不能作爲外部函數的參數。通常,雖然允許您定義函數本地類型,但是如何使用這些類型還有一些限制。我曾打算在我的答案中使用代碼作爲完整,有效的翻譯單元。 – hvd