您好,我有名为MyCode.h和MyCode.cpp的文件
在MyCode.h中,我声明了
enum MyEnum {Something = 0, SomethingElse = 1};
class MyClass {
MyEnum enumInstance;
void Foo();
};
然后在MyCode.cpp中:
#include "MyCode.h"
void MyClass::Foo() {
enumInstance = MyEnum::SomethingElse;
}
但是当使用g++编译时,我得到错误'MyEnum‘不是一个类或名称空间...
(在MS VS2010中工作正常,但在linux g++中工作不正常)
有什么想法吗?谢谢托马斯
发布于 2011-03-04 09:15:30
语法MyEnum::SomethingElse
是微软的一个扩展。它碰巧是我喜欢的,但它不是标准的C++。将enum
值添加到周围的名称空间:
// header
enum MyEnum {Something = 0, SomethingElse = 1};
class MyClass {
MyEnum enumInstance;
void Foo();
}
// implementation
#include "MyClass.h"
void Foo() {
enumInstance = SomethingElse;
}
发布于 2011-03-04 09:13:29
在C++0x之前,作用域枚举将不存在。目前,您的代码应该是
enumInstance = SomethingElse;
您可以通过将枚举的定义放在其自己的命名空间或结构中来创建人工限定作用域的枚举。
发布于 2015-11-06 18:48:03
正如在其他答案中所解释的:语法MyEnum::SomethingElse
在常规C++98枚举上是无效的,除非您的编译器通过非标准扩展支持它们。
我个人不喜欢声明enum MyEnum {A, B};
,因为在使用枚举值时类型名不存在。这可能会导致当前名称空间中的名称冲突。
因此,用户应该在每个枚举值处引用类型名称。避免两次声明A的示例:
enum MyEnum {MyEnum_A, MyEnum_B};
void A(void) {
MyEnum enumInstance = MyEnum_A;
}
我更喜欢使用特定的名称空间或结构。这允许引用具有最新C++样式的枚举值:
namespace MyEnum {
enum Value {A,B};
}
void A(void) {
MyEnum::Value enumInstance = MyEnum::A
}
https://stackoverflow.com/questions/5188554
复制相似问题