簡體   English   中英

C ++中的枚舉從c ++的角度來看

[英]enumerations in C from a c++ perspective

我是一名C ++程序員,我很少需要處理GCC“C”。 我目前正在將一些代碼從C ++轉換為C,以便與GCC編譯器一起使用。

在C ++中,我將使用以下源代碼。 請注意,我會使用一個類作為范圍。

C ++來源

class Card {
public:
   enum Suit {
      Diamonds, Hearts, Clubs, Spades
   };
};

class Weapon {
public:
   enum WeaponType {
      Rocks, Clubs, Guns
   };
};

int main () {
 Suit a = Card::Clubs; 
 WeaponType b = Weapon::Clubs
}

在“C”中沒有類別,也沒有辦法區分兩個不同的“俱樂部”關鍵詞。 嘗試編譯時,我收到以下錯誤消息

錯誤C2365:'俱樂部':重新定義; 以前的定義是'枚舉'

C來源

enum Suit {
    Diamonds, Hearts, Clubs, Spades
};

enum WeaponType {
    Rocks, Clubs, Guns
};

int main () {
 Suit a = Clubs; 
 WeaponType b = Clubs
}

所以我的問題是

  • 如何在同一個文件中使用相同的關鍵字聲明兩個不同的枚舉?
  • 如何將范圍添加到枚舉中,以便我可以使用相同的枚舉名稱為不同的枚舉分配不同的枚舉?

就像過去一樣:

enum Suit {
    ST_Diamonds, ST_Hearts, ST_Clubs, ST_Spades
};

enum WeaponType {
    WT_Rocks, WT_Clubs, WT_Guns
};

int main () {
 Suit a = ST_Clubs; 
 WeaponType b = WT_Clubs;
 return 0;
}

這不能在標准C中完成。來自CA參考手冊 :“聲明為枚舉常量的標識符與變量函數和typedef名稱在同一重載類中”,因此枚舉常量在給定范圍內必須是唯一的。

由於C中缺少名稱空間,您唯一的選擇是前綴:

enum Weapon {
    WeaponRocks,
    WeaponSocks,
    ...
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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