2013-02-28 16 views
9

Sto tentando di utilizzare correttamente la dichiarazione di inoltro per l'enumerazione. Pertanto ho cercato su internet ma non riesco a trovare qualcosa che funzioni.Enum Forward Declaration

sto utilizzando in un colpo di testa:

// Forward declaration 
enum myEnumProcessState; 

che sto quindi utilizzando questo enum in una struttura:

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

E in un altro colpo di testa:

enum myEnumProcessState { 
    eNotRunning, 
    eRunning 
}; 

I ha scoperto che il tipo deve essere inserito nella dichiarazione di enum forward per essere accettato. Tuttavia non so quale "tipo" dovrei inserire per uno stato del processo. Questi non funzionano:

enum myEnumProcessState : unsigned int; 
enum myEnumProcessState : String; 

ho voluto saltare la dichiarazione anticipata ma il mio struct piange perché non riesce a trovare faccio più ...

Quindi sono un po 'confuso. Conosci una soluzione?

Molte grazie :)

+0

perché avete bisogno di trasmettere dichiararla può? basta definirlo prima di usarlo (cioè includere il file che ha l'enum/spostare l'enum in un file che può essere incluso da entrambi i file)? – Default

+0

Beh ... funziona. Ho voluto farlo con una dichiarazione in avanti Ora, se l'unica soluzione "pulita" è saltarla, io ... –

+0

In realtà non so se c'è una soluzione a questo .. Io però non riesco a vedere il motivo per cui vorresti farlo .. – Default

risposta

16

Prima di C++ 11, C++ non supportava forward-dichiarazione di enumerazioni a tutti! Tuttavia, alcuni compilatori (come MS Visual Studio) forniscono estensioni di lingua per questo.

Se il compilatore non supporta C++ 11, consultare la relativa documentazione sulle dichiarazioni di enum forward.

Se è possibile utilizzare C++ 11, c'è il enum class sintassi di (quasi capito bene, ma attenzione alla ulteriore class parola chiave:

// 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) { 
    ... 
} 
+0

Hm. Quando ho messo questo, ho ricevuto un "errore: previsto '{' prima ';' token on the ligne "enum class myEnumProcessState: unsigned int;" ... –

+0

Sembra che il compilatore supporti C++ 03 ma non C++ 11. Le dichiarazioni di inoltro per enumerazione non sono supportate in C++ 03, ma alcuni compilatori li supportano come estensione del linguaggio (indipendentemente dal fatto che si debbano usare queste estensioni è un intero altro tipo di worm) – anatolyg

+0

È G ++ 4.7.2, pensavo che seguisse C++ 11 per impostazione predefinita. ? –