枚举类中的 C++ 运算符重载

标签 c++ class enums overloading operator-keyword

所以我正在使用 C++ 编写一个游戏,在我的教程状态下,我有不同的步骤供用户执行,以解释游戏的工作原理。我想在执行某个操作后增加用户所在的步骤。 (鼠标点击)。我尝试重载 ++ 运算符,但我收到一条错误消息:binary '++': 'STEPS' does not define this operator or a conversion to a type acceptable to the predefined operator。我正在使用 visual studio,它的错误代码为 C2676

我的枚举类设置如下:

enum class STEPS
{
    ONE,
    TWO,
    END_OF_LIST
};

STEPS& operator++(STEPS& s)
{
    s = staic_cast<STEPS>(static_cast<int>(s) + 1);
    if (s == STEPS::END_OF_LIST)
    {
        s = static_cast<STEPS>(static_cast<int>(s) - 1);
    }
    return s;
}

在我的教程状态类的更新函数中,我检查是否单击了鼠标。如果是,我正在尝试增加步数。

//这是在 header 中定义的,并在初始化时设置为 STEPS::ONE STEPS步骤;

TutorialState::Update()
{
    // If mouse was clicked
    if (mouse.Left())
    {
        steps++; // this is giving me an error.
    }
}

最佳答案

STEPS& operator++(STEPS& s);

用于++step

对于step++,你需要

STEPS operator++(STEPS& s, int) { auto res = s; ++s; return res; }

已选择使用额外参数 int 来区分前置和后置增量运算符。

您可以阅读 http://en.cppreference.com/w/cpp/language/operator_incdec了解更多详情。

关于枚举类中的 C++ 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46326632/

相关文章:

c++ - 如何知道SDL2中按下了哪些键

c++ - #include standard files in more than one .cpp, versus #include it in precompiled header 影响可执行文件的大小?

c++ - 递归删除链表会导致堆栈溢出吗?

java - 如何将枚举与命令行参数一起使用?

c++ - 在 C++ 中的 push_back 之前将字符串转换为 float

java - 如何访问子文件夹中的java类

c++ - 关于 C++ 中的访问说明符

c++ - 获取函数指针和类指针的函数?

java - 多对多关系中没有序号键的枚举

c++ - 是否可以使用 static_cast 从可变枚举创建 boost::mpl::list_c?