extern enum in C ++

8

Ich habe eine enum, die ich in einer .h Datei deklariert habe:

%Vor%

in einer separaten .cpp Ich kann das nicht tun:

%Vor%

Wie würde man das tun, ohne den ganzen Header, wo die enum deklariert ist, einzubeziehen?

    
Tom Fobear 07.03.2011, 19:20
quelle

2 Antworten

10

Sie können keinen unvollständigen Typ verwenden. Sie können nur Zeiger darauf weitergeben. Dies liegt daran, dass der Compiler nicht weiß, wie groß er ist, bis der Typ abgeschlossen ist. OTOH ein Zeiger hat die Größe eines Datenzeigers, egal auf welchen Typ er zeigt. Eines der Dinge, die Sie mit einem unvollständigen Typ nicht tun können, ist das Deklarieren von Variablen dieses Typs.

extern in einer Variablendeklaration bedeutet, dass der Compiler einen Verweis auf einen Bezeichner ausgibt, der in einer anderen Kompilierungseinheit bereitgestellt wird (die vom Linker aufgelöst werden soll), anstatt den Speicher zuzuweisen. extern ändert den Typ nicht, auch wenn er neben dem Typnamen in C ++ - Grammatik erscheint.

Was Sie tun können, ist die Tatsache, dass Enum-Elemente ganzzahlige konstante Werte sind und sich gut in die primitiven ganzzahligen Typen konvertieren lassen.

So können Sie das tun:

A.cpp

%Vor%

B.cpp

%Vor%

Aber die Typen müssen übereinstimmen. Sie konnten nicht MYENUM var = TWO; und auch extern int var; sagen. Das würde gegen die Definitionsregel mit einer Definition verstoßen (die Verletzung könnte vom Linker entdeckt werden oder nicht).

Nebenbei bemerkt, das ist falsch:

%Vor%

MYENUM ist KEINE Enum-ID. Es ist ein typedef und kann nicht später mit dem Schlüsselwort enum qualifiziert werden.

    
Ben Voigt 07.03.2011, 19:38
quelle
2

Sie können keine Enum-Werte verwenden, wenn sie nicht sichtbar sind. Wenn der Header zu groß ist, um ihn einzuschließen, warum sollte man nicht einfach die Enumeration in eine eigene Kopfzeile einfügen und nur diese einschließen?

    
Bo Persson 07.03.2011 19:38
quelle