10

列挙型の前方宣言を正しく使用しようとしています。そのため、インターネットを検索しましたが、機能するものが見つかりません。

私はヘッダーでこれを使用しています:

// Forward declaration
enum myEnumProcessState;

次に、この列挙型を構造体で使用しています。

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

そして別のヘッダーで:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

受け入れられるようにするには、型を enum 前方宣言に入れる必要があることがわかりました。しかし、Process State にどの「タイプ」を指定すればよいかわかりません。これらは機能しません:

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String;

前方宣言をスキップしたかったのですが、構造体が見つからないため、構造体が泣いています...

だから私は少し混乱しています。解決策はありますか?

4

1 に答える 1

19

C++11 より前は、C++ は列挙型の前方宣言をまったくサポートしていませんでした! ただし、一部のコンパイラ (MS Visual Studio など) は、そのための言語拡張を提供します。

コンパイラが C++11 をサポートしていない場合は、enum 前方宣言に関するドキュメントを参照してください。

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 に答える