2012-12-12 17 views
21

Mi chiedo se sia possibile inoltrare una enumerazione definita nell'ambito di un'altra classe. Ad esempio, si consideri il seguente:C++ Inoltro enunciato classe dichiarante

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

Ora, in un altro colpo di testa mi piacerebbe trasmettere dichiarare l'enum 'tipo' (supponiamo di classe B di sotto ha una funzione che fa qualcosa con A :: tipo)

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

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

Questo non funziona neanche:

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

class B... 

non c'è nessun problema se l'enum è dichiarata nell'ambito globale in Ah

C'è un modo per farlo?

+2

le enumerazioni devono essere dichiarate come membri statici, sei sicuro di non poter scrivere il programma lasciando fuori la dichiarazione avanzata di enumerazione? –

+0

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

risposta

15

Non è possibile dichiarare tipi annidati al di fuori della definizione della classe.

Se è necessario utilizzarli al di fuori della classe, è necessario includere la definizione di classe o spostarli in uno spazio dei nomi.

+2

La parte triste è quando si tratta di librerie esterne però. – Predelnik

Problemi correlati