extern enum en c++
J'ai un enum je l'ai déclaré dans certains .h fichier:
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
dans un autre .rpc, je ne peux pas faire ceci:
extern enum MYENUM; //works
extern MYENUM TWO; //makes sence, TWO is not an INSTANCE of MYENUM...
comment pourrait-on le faire sans inclure la totalité de l'en-tête où l'enum est déclarée?
Pour utiliser l'énumération des membres qu'ils doivent être lisibles à partir de l'unité de compilation. Cela signifie que vous devez inclure les fichiers d'en-tête.
Il n'essaie pas d'utiliser les membres, AFAICS.
Il n'essaie pas d'utiliser les membres, AFAICS.
OriginalL'auteur Tom Fobear | 2011-03-07
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser un type incomplète. Vous ne pouvez passer des pointeurs. C'est parce que jusqu'à ce que le type est terminé, le compilateur ne sait pas comment elle est grande. Otoh, que un pointeur est de la taille d'un pointeur de données, peu importe le type de pointe. Une des choses que vous ne pouvez pas faire avec un type incomplète est déclarer des variables de ce type.
extern
dans une déclaration de variable signifie que le compilateur émet une référence à un numéro d'identification dans une autre unité de compilation (pour être résolu par l'éditeur de liens), au lieu d'allouer de stockage.extern
ne pas modifier le type, même si elle apparaît à côté du nom du type en C++ de la grammaire.Ce que vous pouvez faire est de prendre avantage du fait que les enum membres font partie intégrante des valeurs constantes, et de convertir seulement une amende à la primitive intégrale types.
De sorte que vous pouvez le faire:
A.cpp
B.cpp
Mais les types doivent correspondre. On ne pouvait pas dire
MYENUM var = TWO;
et aussiextern int var;
. Qui serait en violation de l'une définition de la règle (violation pourrait ou ne pourrait pas être détectées par l'éditeur de liens).Que d'un côté, c'est incorrect:
MYENUM
n'est PAS un enum identificateur. C'est une définition de type, et ne peut pas être qualifié avec leenum
mot-clé plus tard.OriginalL'auteur Ben Voigt
Vous ne pouvez pas utiliser les valeurs de l'enum, si elles ne sont pas visibles. Si la tête est trop grande pour comprendre, pourquoi ne pas simplement mettre enum dans son propre en-tête, et ne comprennent que ça?
OriginalL'auteur Bo Persson