将值设置为同一命名空间但不同类的枚举? C ++

时间:2011-04-14 14:37:09

标签: c++ enums namespaces

修改 感谢问题下的评论,我意识到你还必须在头文件中声明一个枚举。 >。<为什么互联网上关于枚举的内容没有提到这一点? 现在编译器正在识别地质学家。

我的枚举在名为namespace Star的类中GameModeState范围内,但我需要检查名为ZoneMovementState的类中的当前枚举值,该类也使用namespace Star。我将GameModeState包含在ZoneMovementState的顶部。 GameModeState中的枚举声明是:

enum Job {Landman = 0, Geologist = 1};

我正在尝试在ZoneMovementState中使用此代码:

int placeholderJob = Star::GameModeState::Geologist;
//or I've tried this
int placeholderJob = GameModeState::Geologist;

出于某种原因,我的编译器在任何一次尝试中都没有认识到地质学家;如何将placeholderJob设置为地质师?

2 个答案:

答案 0 :(得分:0)

它是否不承认您的计划范围内的地质学家? (当你鼠标移开时会弹出intellisense并告诉你地质学家是一个等于1的枚举类型)或者它下面有一个squigly(表示它不能识别这种类型?)

这可能是一个范围问题(虽然根据您的信息听起来不像),或者您使用的编译器可能不允许在没有显式强制转换的情况下将枚举值设置为整数。

答案 1 :(得分:0)

  

为什么互联网上关于枚举的内容没有提到这一点?

互联网不需要提及这一点,因为它可以解决编译单元问题。

头文件可以告诉编译器(基本上)存在哪些名称(标识符)以及它们代表什么。这就是为什么编译器告诉你何时他不知道地质学家代表什么。

对于函数,字段,类,结构,typedef,名称空间也是如此,所以真正的问题是

  

为什么编译器会神奇地知道另一个编译单元中的枚举,什么时候必须为他拼出其他内容?