Tamamlanmamış bir tür kullanamazsınız. Sadece işaretçilerden geçebilirsiniz. Bunun nedeni, tür tamamlanana kadar derleyicinin ne kadar büyük olduğunu bilmemesidir. OTOH bir işaretçi, hangi tipte olduğuna bakılmaksızın bir veri işaretçisinin boyutudur. Tamamlanmamış bir türle yapamayacağınız şeylerden biri, bu türden değişkenleri bildirmektir. Bir değişken bildiriminde extern
, derleyicinin, başka bir derleme biriminde (bağlayıcı tarafından çözülecek) bir tanımlayıcıya bir başvuru yayınlayacağı anlamına gelir. extern
, C++ dilbilgisinde yazım adının yanında görünse bile türü değiştirmez.
Ne yapabilirsiniz enum üyeleri ayrılmaz sabit değerlerdir gerçeği yararlanmak ve ilkel tamsayı türlere gayet dönüştürmek olduğunu.
A.cpp
enum MYENUM { ONE=1, TWO, THREE };
int var = TWO;
B.cpp
extern int var;
Ama türleri eşleşmelidir:
Yani bunu yapabilirsiniz. MYENUM var = TWO;
ve ayrıca extern int var;
diyemezsiniz. Bu, tek tanım kuralını ihlal eder (ihlal, bağlayıcı tarafından algılanabilir veya algılanmayabilir).
bir kenara, bu yanlıştır:
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
enum MYENUM TWO;
MYENUM
bir enum tanımlayıcı DEĞİLDİR. Bu bir yazım hatasıdır ve daha sonra enum
anahtar kelimesiyle nitelendirilemez.
Enum üyelerini kullanmak için derleme biriminden görünebilir olmalıdırlar. Bu, başlık dosyalarını eklemeniz gerektiği anlamına gelir. –
O, AFAICS üyelerini kullanmaya çalışmıyor. –