2012-09-24 43 views
0

在C++中使用枚举时,我喜欢使用EnumName::Value(而不仅仅是Value)。在C++中,这可能是警告或错误,具体取决于编译器设置。错误的名称不允许您使用::解析枚举?

在XCode中,允许我设置的名称是而不是有没有将此作为编译器错误?

enter image description here

(取ErrorLevel::远解决了错误)

+0

AFAIK这只是一个错误(除非你是使用C++ 11“枚举类”)。 –

+0

VC++将其标记为警告[C4482](http://msdn.microsoft.com/zh-cn/library/ms173704(v = vs80).aspx)。这是因为我导入了相同的代码(来自另一个xCode项目)并突然出现错误。必须有一些设置导致它出现错误。 – bobobobo

+0

事实上,就标准而言它*是一个错误,VC++允许它是非标准扩展。 –

回答

1
  • 如果使用,你的语法是正确的:

    enum EnumName 
    { 
    Value 
    } 
    ... 
    EnumName n = EnumName::Value; 
    

    另外要注意的是,如果你使用 ,你可以要求使用EnumName::Value inste通过使用enum class代替enum广告只是Value

    enum class EnumName 
    { 
    Value 
    } 
    ... 
    EnumName n = EnumName::Value; //ok 
    EnumName fuuu = Value; // compilation error 
    
  • 否则,您可以用命名空间包裹你的枚举声明中的标准C++

    namespace EnumName { 
    enum EnumName 
    { 
    Value 
    } 
    } 
    ... 
    EnumName::EnumName n = EnumName::Value; 
    
+0

这是一个非常好的建议。现在它_requires_' EnumName :: EnumValue'格式! – bobobobo

+0

@bobobobo,另见编辑。 – Lol4t0

+0

好的。另外[如果你改变你的_C++语言dialect_到C++ 11](http://i.stack.imgur.com/UnduE.png)它修复了这个问题:) – bobobobo