簡體   English   中英

c ++中的外部枚舉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM