extern enum in c++
Ich habe eine enum-ich habe erklärt in einigen .h-Datei:
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
in einem separaten .cpp das kann ich nicht:
extern enum MYENUM; //works
extern MYENUM TWO; //makes sence, TWO is not an INSTANCE of MYENUM...
wie würde man dies tun, ohne die ganze Kopfzeile, in der die enum deklariert?
- Die Verwendung der enum-Mitglieder werden, müssen Sie sichtbar von der compilation unit. Dies bedeutet, dass Sie brauchen, um die header-Dateien.
- Er ist nicht zu versuchen, die Mitglieder, AFAICS.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht mit einem unvollständigen Typ. Sie können nur übergeben, um Verweise darauf. Dies ist, weil, bis der Typ fertig ist, kann der compiler nicht wissen, wie groß es ist. OTOH einen Zeiger wird die Größe eines Daten-Zeiger, egal was für eine Art es zeigen zu können. Eines der Dinge, die Sie nicht tun können, mit ein unvollständiger Typ ist, deklarieren Sie Variablen von diesem Typ.
extern
in einer Variablen-Deklaration bedeutet, dass der compiler, geben einen Verweis auf einen Bezeichner in einer anderen compilation unit (werden gelöst durch den linker), statt der Zuweisung von Speicher.extern
ändert nicht die Art, auch wenn es scheint neben dem Typ-Namen in C++ Grammatik.Was Sie tun können, ist die Tatsache zunutze, dass die enum-Mitglieder sind Integrale Konstante Werte, und konvertieren Sie einfach gut zu der primitiven Integrale Typen.
Damit Sie dies tun können:
A.cpp
B.cpp
Aber die Typen müssen übereinstimmen. Sie konnte nicht sagen, dass
MYENUM var = TWO;
und auchextern int var;
. Das würde gegen die one-definition-rule (Verletzung möglicherweise oder möglicherweise nicht erkannt werden durch den linker).Als ein beiseite, das ist falsch:
MYENUM
ist NICHT eine enum-Bezeichner. Es ist ein typedef, und kann nicht qualifiziert werden, mit derenum
Schlüsselwort später.Können Sie nicht verwenden enum-Werte, wenn Sie nicht sichtbar sind. Wenn der header zu groß, um zu zählen, warum nicht einfach die enum in seinem eigenen Kopf, und zählen nur das?