Enum Forward Declaration

时间:2013-02-28 16:56:58

标签: c++ enums forward-declaration

我正在尝试为枚举使用正确的前向声明。因此,我搜索了互联网,但我找不到有用的东西。

我在标题中使用:

// Forward declaration
enum myEnumProcessState;

然后我在结构中使用这个枚举:

struct myStruct {
    [...]
    myEnumProcessState osState;
    [...]
};

在另一个标题中:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

我发现该类型应该被放入enum forward声明中以便被接受。但是,我不知道我应该为流程状态添加哪种“类型”。这些不起作用:

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String; 

我想跳过前方声明,但我的结构正在哭泣,因为它再也找不到了......

所以我有点困惑。你知道解决方案吗?

非常感谢:)

1 个答案:

答案 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) {
    ...
}