Enum正向声明

Enum Forward Declaration

本文关键字:声明 Enum      更新时间:2023-10-16

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

我在标题中使用这个:

// Forward declaration
enum myEnumProcessState;

然后在struct中使用这个enum:

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

在另一个标头中:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

我发现该类型应该放在enum forward声明中才能被接受。但是,我不知道是哪种"类型"。应该是过程状态。

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String;

我想跳过forward声明,但是我的结构体哭了,因为它再也找不到它了…

所以我有点困惑。有解决办法吗?

在c++ 11之前,c++根本不支持枚举的前向声明!然而,一些编译器(如MS Visual Studio)提供了语言扩展。

如果您的编译器不支持c++ 11,请查看其文档中的enum forward声明。

如果你可以使用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) {
    ...
}