C++ 枚举增量的运算符重载

C++ 枚举增量的运算符重载,c++,operator-overloading,C++,Operator Overloading,我有这个枚举,我只想将该枚举的一个对象增加一个位置 enum Month { january = 1, february, march, april, may, june, july, august, september, october, november, december }; 对于我的枚举对象Month m,我只想将对象的变量移动一个位置 Month operator++(Month &am

我有这个枚举,我只想将该枚举的一个对象增加一个位置

enum Month {
    january = 1,
    february,
    march,
    april,
    may,
    june,
    july,
    august,
    september,
    october,
    november,
    december
};
对于我的枚举对象Month m,我只想将对象的变量移动一个位置

Month operator++(Month &m) {
        m = static_cast<Month>(m + 1);
        return m;
    }
Month操作符++(月&m){
m=静态(m+1);
返回m;
}
以Month&m为参数,我会发现错误,它需要将int作为参数。所以如果我使用“(Month&m,int)”它说它“必须接受零个或一个参数。”我读到如果操作符重载是一个成员函数,则不需要Month&m,所以我删除了它。在那之后,我又遇到了另一个错误:“运算符++”(操作数类型为“月”)不匹配”。我有什么遗漏吗

主要代码:

class Date {
    int y, d, month_end; // private
    Month m;

    public:
        Date(int yy, Month mm, int dd) 
        : y(yy), d(dd), m(mm) { 
        }

        Month& operator++(Month &m) { 
            m = static_cast<Month>(m + 1);
            return m;
        }

        void add_month() {
            ++m;
        }
上课日期{
整数y,d,月末;//私有
月m;
公众:
日期(国际年、月、日)
:y(yy),d(dd),m(mm){
}
月和运算符++(月和m){
m=静态(m+1);
返回m;
}
void add_month(){
++m;
}

在评论中,您说:

有什么是我忽略的吗

是的。您是在一个不寻常的地方定义函数的,
Date
的定义中。它需要是一个非成员函数

使用名称空间std

enum Month {
   january = 1,
   february,
   march,
   april,
   may,
   june,
   july,
   august,
   september,
   october,
   november,
   december
};

Month& operator++(Month &m) {
   m = static_cast<Month>(m + 1);
   return m;
}

class Date {
   int y, d;
   Month m;

   public:
   Date(int yy, Month mm, int dd) // constructor
      : y(yy), d(dd), m(mm) { // member initializer
      }


   void add_month() {
      ++m;
   }
};

int main()
{
   Month m = january;
   ++m;
enum月{
一月=1,
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
};
月和操作员++(月和月){
m=静态(m+1);
返回m;
}
上课日期{
int y,d;
月m;
公众:
日期(年月日)//
:y(yy),d(dd),m(mm){//成员初始值设定项
}
void add_month(){
++m;
}
};
int main()
{
月份m=一月;
++m;

您正在使用哪个编译器?可以与MS vs14配合使用。请显示您的
Main()
。@lakeweb gcc版本6.4.0 20170704(Debian 6.4.0-1)实际上,我还没有使用运算符重载调用任何东西,但我会将其添加到原始问题中。@sS5H我认为lakeweb评论的含义是让您创建一个。@jodag Fixed,这是可能用于解决我的问题的代码第一个函数,
Month operator++(Month&m)
,工作文件位于。@lakeweb,一旦OP在ideone.com上发布了MCVE,就很容易看到错误。我们再怎么强调MCVE的重要性也不为过。