C ++中的枚举从c ++的角度来看

时间:2011-10-18 18:46:35

标签: c++ c enums

我是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中添加范围,以便为不同的enum分配具有相同枚举名称的不同枚举?

3 个答案:

答案 0 :(得分:10)

就像过去一样:

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;
}

答案 1 :(得分:3)

这不能在标准C中完成。来自 CA参考手册:“声明为枚举常量的标识符与变量函数和typedef名称在同一个重载类中”,因此枚举常量必须是唯一的给定的范围。

答案 2 :(得分:2)

由于C中缺少名称空间,您唯一的选择是前缀:

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