所以我正在使用 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/