[英]extern enum in c++
我有一個我在一些.h文件中聲明的枚舉:
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
在一個單獨的.cpp我不能這樣做:
extern enum MYENUM; //works
extern MYENUM TWO; //makes sence, TWO is not an INSTANCE of MYENUM...
怎么會這樣做而不包括枚舉枚舉的整個標題?
您不能使用不完整的類型。 你只能傳遞指向它的指針。 這是因為在類型完成之前,編譯器不知道它有多大。 OTOH指針是數據指針的大小,無論它指向什么類型。 對於不完整類型,您無法做的事情之一是聲明該類型的變量。
變量聲明中的extern
意味着編譯器將發出對另一個編譯單元中提供的標識符的引用(由鏈接器解析),而不是分配存儲。 extern
不會修改類型,即使它出現在C ++語法中的類型名稱旁邊。
你可以做的是利用枚舉成員是整數常量值的事實,並將其轉換為原始整數類型。
所以你可以這樣做:
A.cpp
enum MYENUM { ONE=1, TWO, THREE };
int var = TWO;
B.cpp
extern int var;
但類型必須匹配。 你不能說MYENUM var = TWO;
還有extern int var;
。 這將違反單一定義規則(鏈接器可能會或可能不會檢測到違規)。
另外,這是不正確的:
typedef enum {
NONE,
ONE,
TWO,
THREE
} MYENUM;
enum MYENUM TWO;
MYENUM
不是枚舉標識符。 它是一個typedef,以后無法使用enum
關鍵字進行限定。
如果枚舉值不可見,則無法使用它們。 如果標題太大而無法包含,為什么不將枚舉放在自己的標題中,只包括那個?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.