2012-12-12 8 views
21

別のクラススコープ内で定義されている列挙型を宣言することが可能かどうかと思います。たとえば、次のよう考慮してください。別のヘッダに、私は「タイプ」列挙型を宣言転送したいのですが、今C++フォワード宣言クラススコープ付き列挙

//A.h 
class A 
{ 
public: 
    enum class type: unsigned long { /*some stuff*/ } 
}; 

を(仮定するクラスBは、下記::タイプで何かをする機能を持っている)

//B.h 
enum A::type; //use of undefined type 'A' 

class B 
{ 
public: 
    UseTypeEnum(A::Type&); 
}; 

これはどちらか動作しません:列挙型はああでグローバルスコープで宣言されている場合

//B.h 
class A; 
enum A::type; //still use of undefined type 

class B... 

何ら問題はありません

これを行う方法はありますか?

+2

列挙型は静的メンバーとして宣言する必要があります。列挙型宣言を省略してプログラムを書くことはできませんか? –

+0

for 'enum':http://stackoverflow.com/questions/2238170/forward-declaration-of-nested-enum –

答えて

15

ネストされた型をクラス定義の外に宣言することはできません。

クラス外で使用する必要がある場合は、クラス定義を含めるか、名前空間に移動する必要があります。

+2

悲しい部分は、それは外部ライブラリについてです。 – Predelnik

関連する問題