我的枚举不是类或命名空间

Pro*_*rof 59 c++ enums g++ c++11

嗨,我有名为MyCode.h和MyCode.cpp的文件

在我已经声明的MyCode.h中

enum MyEnum {Something = 0, SomethingElse = 1};

class MyClass {

MyEnum enumInstance;
void Foo();

}; 
Run Code Online (Sandbox Code Playgroud)

然后在MyCode.cpp中:

#include "MyCode.h"

void MyClass::Foo() {
    enumInstance = MyEnum::SomethingElse;
}
Run Code Online (Sandbox Code Playgroud)

但是当用g ++编译时,我得到错误'MyEnum'不是类或命名空间......

(在MS VS2010中工作正常,但不是linux g ++)

有任何想法吗?谢谢托马斯

Max*_*ert 63

语法MyEnum::SomethingElse是Microsoft扩展.它碰巧是我喜欢的,但它不是标准C++. enum值被添加到周围的命名空间:

 // header
 enum MyEnum {Something = 0, SomethingElse = 1};

 class MyClass {

 MyEnum enumInstance;
 void Foo();

 }

 // implementation
 #include "MyClass.h"

 void Foo() {
     enumInstance = SomethingElse;
 }
Run Code Online (Sandbox Code Playgroud)

  • 幸运的是,C++ 0x将增加这个容量,我认为这个容量已经存在了很长时间并且非常需要. (7认同)

ild*_*arn 51

在C++ 0x之前,Scoped枚举将不存在.目前,您的代码应该是

enumInstance = SomethingElse;
Run Code Online (Sandbox Code Playgroud)

您可以通过将枚举的定义放在其自己的命名空间或结构中来创建人工范围的枚举.


gre*_*gn3 31

实际上,C++ 0x允许该功能.我可以使用此命令行标志在gcc中成功启用它:-std = c ++ 0x

这是使用gcc版本4.4.5