2013-02-28 8 views
9

Ich versuche korrekt Vorwärtsdeklaration für enums zu verwenden. Deshalb habe ich das Internet durchsucht, aber ich kann nichts finden, was funktioniert.Enum Forward Declaration

ich in einem Header bin mit:

// Forward declaration 
enum myEnumProcessState; 

Ich verwende dieses Enum dann in einer Struktur:

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

Und in einem anderen Header:

enum myEnumProcessState { 
    eNotRunning, 
    eRunning 
}; 

I fand heraus, dass der Typ in die enum forward-Deklaration aufgenommen werden sollte, um akzeptiert zu werden. Allerdings weiß ich nicht, welchen "Typ" ich für einen Prozessstatus setzen soll. Diese funktionieren nicht:

enum myEnumProcessState : unsigned int; 
enum myEnumProcessState : String; 

ich die Vorwärts-Erklärung überspringen wollte, aber meine Struct weint, da sie kann es nicht mehr finden ...

Also ich bin ein wenig verwirrt. Kennst du eine Lösung?

Vielen Dank :)

+0

warum müssen Sie es erklären weiterleiten kann? definierst du es nicht, bevor du es verwendest (das heißt, die Datei mit der Enumeration aufnehmen/die Enumeration in eine Datei verschieben, die in beiden Dateien enthalten sein kann) – Default

+0

Nun ... es funktioniert, aber ich würde es wirklich tun Ich wollte es mit einer Forward-Deklaration machen Nun, wenn die einzige "saubere" Lösung ist es zu überspringen, werde ich ... –

+0

Ich weiß eigentlich nicht, ob es eine Lösung für diese .. Ich scheitere jedoch Siehe die Grund, warum Sie es tun möchten .. – Default

Antwort

16

Bevor C++ 11, hat C++ nicht vorausErklärung Aufzählungen überhaupt unterstützen! Einige Compiler (wie MS Visual Studio) bieten jedoch dafür Spracherweiterungen.

Wenn Ihr Compiler C++ 11 nicht unterstützt, suchen Sie in der Dokumentation nach Enum-Forward-Deklarationen.

Wenn Sie C++ 11 verwenden kann, gibt es die enum class Syntax (Sie es fast richtig, aber die Aufmerksamkeit auf die zusätzlichen class Schlüsselwort zahlen:

// 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. Als ich das hier ansetzte, bekam ich einen "Fehler: erwartet '{' vorher ';' token auf der ligne "enum-klasse myEnumProcessState: unsigned int;" ... –

+0

Es scheint, dass Ihr Compiler unterstützt C++ 03, aber nicht C++ 11. Vorwärts Deklarationen für Aufzählungen werden nicht unterstützt in C++ 03, aber einige Compiler unterstützen sie als eine Spracherweiterung (ob Sie diese Erweiterungen verwenden sollten oder nicht, ist eine ganz andere Dose Würmer). – anatolyg

+0

Es ist G ++ 4.7.2, ich dachte, dass es standardmäßig C++ 11 folgte ? –