我正在尝试为枚举使用正确的前向声明。因此,我搜索了互联网,但我找不到有用的东西。
我在标题中使用:
// Forward declaration
enum myEnumProcessState;
然后我在结构中使用这个枚举:
struct myStruct {
[...]
myEnumProcessState osState;
[...]
};
在另一个标题中:
enum myEnumProcessState {
eNotRunning,
eRunning
};
我发现该类型应该被放入enum forward声明中以便被接受。但是,我不知道我应该为流程状态添加哪种“类型”。这些不起作用:
enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String;
我想跳过前方声明,但我的结构正在哭泣,因为它再也找不到了......
所以我有点困惑。你知道解决方案吗?
非常感谢:)
答案 0 :(得分:19)
在C ++ 11之前,C ++根本不支持枚举的前向声明!但是,一些编译器(如MS Visual Studio)为此提供了语言扩展。
如果您的编译器不支持C ++ 11,请查看有关枚举前向声明的文档。
如果你可以使用C ++ 11,那就是enum class
语法(你几乎把它弄好了,但要注意额外的class
关键字:
// Forward declaration
enum class myEnumProcessState: unsigned int;
// Usage in a struct
struct myStruct {myEnumProcessState osState;};
// Full declaration in another header
enum class myEnumProcessState: unsigned int {
eNotRunning,
eRunning
};
// Usage of symbols (syntax may seem slightly unusual)
if (myObject.osState == myEnumProcessState::eNotRunning) {
...
}