我的枚举不是类或命名空间
您好,我有名为 MyCode.h 和 MyCode.cpp 的文件
声明了
enum MyEnum {Something = 0, SomethingElse = 1};
class MyClass {
MyEnum enumInstance;
void Foo();
};
在 MyCode.h 中我已在 MyCode.cpp 中
#include "MyCode.h"
void MyClass::Foo() {
enumInstance = MyEnum::SomethingElse;
}
Then:但是当使用 g++ 编译时,我收到错误“MyEnum”不是类或命名空间...
(在MS VS2010 但不是 linux g++)
有什么想法吗? 谢谢 托马斯
Hi I have files called MyCode.h and MyCode.cpp
In MyCode.h I have declared
enum MyEnum {Something = 0, SomethingElse = 1};
class MyClass {
MyEnum enumInstance;
void Foo();
};
Then in MyCode.cpp:
#include "MyCode.h"
void MyClass::Foo() {
enumInstance = MyEnum::SomethingElse;
}
but when compiling with g++ I get the error 'MyEnum' is not a class or namespace...
(works fine in MS VS2010 but not linux g++)
Any ideas?
Thanks
Thomas
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
语法
MyEnum::SomethingElse
是 Microsoft 扩展。它恰好是我喜欢的一种,但它不是标准 C++。enum
值被添加到周围的命名空间:The syntax
MyEnum::SomethingElse
is a Microsoft extension. It happens to be one I like, but it's not Standard C++.enum
values are added to the surrounding namespace:作用域枚举直到 C++0x 才会存在。目前,您的代码应该是
您可以通过将枚举的定义放入其自己的命名空间或结构中来创建人工范围的枚举。
Scoped enums will not exist until C++0x. For the time being, your code should be
You can create an artificial scoped enum by putting the enum's definition inside its own namespace or struct.
事实上,C++0x 允许该功能。我可以使用以下命令行标志在 gcc 中成功启用它: -std=c++0x
This was with gcc version 4.4.5
Indeed, C++0x allows that feature. I could enable it successfully in gcc using this command line flag: -std=c++0x
This was with gcc version 4.4.5
正如其他答案中所解释的:语法
MyEnum::SomethingElse
在常规 C++98 枚举上无效,除非您的编译器通过非标准扩展支持它们。我个人不喜欢声明
enum MyEnum {A, B};
因为使用枚举值时不存在类型名称。这可能会导致当前名称空间中的名称冲突。因此用户应该在每个枚举值处引用类型名称。避免声明 A 两次的示例:
我更喜欢使用特定的名称空间或结构。
这允许使用最新的 C++ 风格引用枚举值:
As explain in other answers: syntax
MyEnum::SomethingElse
is not valid on regular C++98 enums unless your compiler supports them through non-standard extensions.I personally don't like the declaration
enum MyEnum {A, B};
because Type name is not present while using enum values. This can leads to conflict of names in the current name space.So user should refer to the type name at each enum values. Example to avoid declaring A twice:
I prefer to use a specific name space or structure.
This allow to reference enum values with latest C++ style: