如何在代码的另一部分中使用类中的Enum值?

时间:2010-12-22 06:34:53

标签: c++ class enums

来自当地大学夜校的C#背景,我开始用C ++开始了。习惯了语法很痛苦。在编码技术方面,我还是非常环保。

从我的WinMain函数中,我希望能够访问一个使用我在另一个类中声明的枚举的变量。

(inside core.h)
class Core
{
    public:
    enum GAME_MODE
    {
        INIT,
        MENUS,
        GAMEPLAY
    };
    GAME_MODE gameMode;

    Core();
    ~Core();
    ...OtherFunctions();
};

(inside main.cpp)
Core core;
int WINAPI WinMain(...)
{
    ... startup code here...

    core.gameMode = Core.GAME_MODE.INIT;

    ...etc...
}

基本上我想将gameMode设置为Init的枚举值或来自我的WinMain函数的类似值。我也希望能够从其他领域阅读它。

我收到了错误......

expected primary-expression before '.' token

如果我尝试使用core.gameMode = Core::GAME_MODE.INIT;,那么我会收到同样的错误。

我并不喜欢最佳实践,因为我只是想了解在文件之间传递C ++变量的基本理解。一旦我习惯了语法的灵活性,我将确保变量受到保护并且整齐地隐藏起来。

如果我没记错的话,C#允许我使用其他课程的Enums,而我所要做的只是Core.ENUMNAME.ENUMVALUE

我希望我想要做的是明确的:\我不知道有多少正确的术语。

1 个答案:

答案 0 :(得分:45)

使用

core.gameMode = Core::INIT;

枚举的各个值的范围不在该枚举范围内,而是与枚举本身处于同一级别。这是大多数其他语言(包括C#)做的不同,而C ++ 0x将允许这两种变体,

core.gameMode = Core::GAME_MODE::INIT;

也是合法的。

此外,将在C ++ 0x(enum class)中添加的强类型枚举将枚举值置于枚举范围内(即在C#中) );这解决了您在评论中指出的问题,对于“普通”枚举,枚举值的标识符在同一范围内定义的所有枚举中必须是唯一的。