【问题标题】:How do I use the Enum value from a class in another part of code?如何在代码的另一部分使用类中的 Enum 值?
【发布时间】:2011-05-29 06:00:33
【问题描述】:

我在当地大学的夜间课程中获得了 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# 允许我使用来自其他类的枚举,而我所要做的就是像 Core.ENUMNAME.ENUMVALUE 这样的东西。

我希望我想要做的很清楚:\因为我不知道很多正确的术语是什么。

【问题讨论】:

    标签: c++ class enums


    【解决方案1】:

    使用

    core.gameMode = Core::INIT;
    

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

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

    也是合法的。

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

    【讨论】:

    • 真好!谢谢你 :) 现在我可以看到有很多关于枚举的主题如果它们在同一个命名空间中需要有不同的名称
    • @ChiggenWingz:很好的观察——C++0x 的强类型枚举将在这方面有所帮助(我已经更新了讨论这个问题的答案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多