亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉發在C ++中聲明一個枚舉

轉發在C ++中聲明一個枚舉

C++
12345678_0001 2019-08-09 17:50:40
轉發在C ++中聲明一個枚舉我正在嘗試做類似以下的事情:enum E;void Foo(E e);enum E {A, B, C};編譯器拒絕的。我已經快速瀏覽了一下Google,而且共識似乎是“你做不到”,但我無法理解為什么。誰能解釋一下?澄清2:我這樣做是因為我在類中使用私有方法來獲取枚舉,并且我不希望枚舉枚舉值 - 例如,我不希望任何人知道E被定義為enum E {     FUNCTIONALITY_NORMAL, FUNCTIONALITY_RESTRICTED, FUNCTIONALITY_FOR_PROJECT_X}因為項目X不是我希望用戶了解的東西。所以,我想轉發聲明枚舉,以便我可以將私有方法放在頭文件中,在cpp內部聲明枚舉,并將構建的庫文件和標題分發給人。至于編譯器 - 它是GCC。
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

在C ++ 0x中也可以進行枚舉的前向聲明。以前,枚舉類型無法向前聲明的原因是因為枚舉的大小取決于其內容。只要枚舉的大小由應用程序指定,就可以向前聲明:


enum Enum1;                   //Illegal in C++ and C++0x; no size is explicitly specified.

enum Enum2 : unsigned int;    //Legal in C++0x.

enum class Enum3;             //Legal in C++0x, because enum class declarations have a default type of "int".

enum class Enum4: unsigned int; //Legal C++0x.

enum Enum2 : unsigned short;  //Illegal in C++0x, because Enum2 was previously declared with a different type.


查看完整回答
反對 回復 2019-08-09
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

鑒于最近的發展,我在這里添加了一個最新的答案。

您可以在C ++ 11中轉發聲明枚舉,只要您同時聲明其存儲類型即可。語法如下所示:

enum E : short;void foo(E e);....enum E : short{
    VALUE_1,
    VALUE_2,
    ....}

實際上,如果函數永遠不會引用枚舉的值,那么此時您根本不需要完整的聲明。

G ++ 4.6及更高版本(-std=c++0x-std=c++11更新版本)支持此功能。Visual C ++ 2013支持這一點; 在早期版本中它有一些我尚未想到的非標準支持 - 我發現一些簡單的前向聲明是合法的,但是YMMV。


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關注
  • 589 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號