2013-06-21 122 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