web-dev-qa-db-ja.com

列挙型前方宣言

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

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

// Forward declaration
enum myEnumProcessState;

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

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

そして別のヘッダーで:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

受け入れられるには、型を列挙型前方宣言に入れる必要があることがわかりました。ただし、プロセス状態にどの「タイプ」を設定する必要があるのか​​わかりません。これらは機能しません:

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String; 

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

だから私は少し混乱しています。あなたは解決策を知っていますか?

どうもありがとう :)

10
user2069871

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) {
    ...
}
19
anatolyg