枚举类型的运算符重载

sri*_*anp 3 c++

考虑以下代码:

#include<iostream>


enum week
{
    sun=1,
    mon,
    tue,
    wed,
    thr,
    fri,
    sat
};


week &operator++(week& day,int)
{
    if(day==sat)
        day=sun;
    else
        day++; // This expression
   return day;
}


int main()
{
    week day=sun;
    for(int i=0;i<=10;i++,day++)
    {
        std::cout<<day;
    }
}
Run Code Online (Sandbox Code Playgroud)

在表达式中day++它进入无限递归。

如果我像((int)day)++编译器一样投射它会出现以下错误:

      error: lvalue required as increment operand
Run Code Online (Sandbox Code Playgroud)

如果我将线路更改为day=week(((int)day)+1)它的工作原理。但是如何修复上面的代码以便它与++操作员一起工作?

L. *_*son 5

默认的增量运算符不适用于枚举。您必须重载增量运算符(使用您的week(((int)day)+1)逻辑)并在该重载函数中处理环绕。