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

将值设置为同一命名空间中不同类的枚举?C++,c++,enums,namespaces,C++,Enums,Namespaces,编辑 由于问题下方的注释,我意识到您还必须在头文件中声明一个enum为什么互联网上没有关于Enum的内容提到这一点? 现在编译器正在识别地质学家 我的枚举位于名为GameModestrate的类中的名称空间星形内,但我需要检查名为ZoneMovementState的类中的当前枚举值,该类也使用名称空间星形。我在ZoneMovementState的顶部包含GameModestrate。 GameModeState中的枚举声明如下: enum Job {Landman = 0, Geologist

编辑 由于问题下方的注释,我意识到您还必须在头文件中声明一个enum为什么互联网上没有关于Enum的内容提到这一点? 现在编译器正在识别地质学家

我的枚举位于名为GameModestrate的类中的名称空间星形内,但我需要检查名为ZoneMovementState的类中的当前枚举值,该类也使用名称空间星形。我在ZoneMovementState的顶部包含GameModestrate。 GameModeState中的枚举声明如下:

enum Job {Landman = 0, Geologist = 1};
我试图在ZoneMovementState中使用此代码:

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

出于某种原因,我的编译器在两次尝试中都没有认出地质学家;如何将Placeholder Job设置为Geologist?

在您的程序范围内,它是否不识别Geologist?当您将鼠标悬停在intellisense上时,intellisense是否会弹出并向您显示Geologist是一个等于1的枚举类型,或者它下面是否有一个歪歪扭扭的图标,表明它无法识别该类型

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

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

互联网不需要提及这一点,因为它会搜索编译单元

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

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

为什么一个编译器会神奇地知道另一个编译单元中的枚举,而其他一切都必须为他详细说明


工作是否被宣布为公开?你的编译器的确切错误信息是什么?用英语描述代码——一种充满双重含义的非常复杂的语言——文化差异——通常是个坏主意。显示实际代码。像C++那样的语言设计成用一种方式来解释。因此,请显示相应的代码和错误消息。最好是一段代码,我们可以编译并获得相同的错误消息。您是在GameModestrate的private或protected部分创建枚举的吗?实际的错误消息会很有用。我也很好奇为什么你的代码看起来不像GameModestrate::Job Placeholder Job=地质学家;虽然我也不知道这是否管用。它已经修好了,很明显,它显示了红色的曲线。我没有在头文件中声明枚举。T_TYup,刚才看到了其他评论:我像往常一样迟到了。我选择你的答案是因为你很好,并且实际上询问了问题的具体情况,而不是询问错误消息。对我来说,这可能意味着当我试图编译我的代码时,我的编译器抛出了什么,而我没有编译。