2012-12-12 18 views
21

Ich frage mich, ob es möglich ist, eine Enum deklarieren, die in einem anderen Klassenbereich definiert ist. Betrachten wir zum Beispiel die folgende:C++ Forward Deklaration Klassenbereichsaufzählung

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

nun in einem anderen Header würde Ich mag den ‚Typ‘ Enum weiterleiten erklären (suppose Klasse B unten hat eine Funktion, die etwas mit A :: Art der Fall ist)

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

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

das funktioniert auch nicht:

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

class B... 

kein Problem gibt es, wenn die Enumeration auf globaler Tragweite in Ah erklärt

Gibt es eine Möglichkeit, dies zu tun?

+2

Enumerationen sollten als statische Mitglieder deklariert werden, sind Sie sicher, dass Sie das Programm nicht schreiben können, ohne die Enums-Forward-Deklaration auszulassen? –

+0

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

Antwort

15

Sie können verschachtelte Typen nicht außerhalb der Klassendefinition deklarieren.

Wenn Sie sie außerhalb der Klasse verwenden müssen, müssen Sie entweder die Klassendefinition einschließen oder sie in einen Namespace verschieben.

+2

Der traurige Teil ist, wenn es um externe Bibliotheken geht. – Predelnik

Verwandte Themen