10

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

我在标题中使用它:

// Forward declaration
enum myEnumProcessState;

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

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

在另一个标题中:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

我发现类型应该放在枚举前向声明中才能被接受。但是,我不知道应该为流程状态输入哪种“类型”。这些不起作用:

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String;

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

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

4

1 回答 1

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) {
    ...
}
于 2013-02-28T19:33:13.313 回答