此代码运算符重载有什么错误?

时间:2019-03-16 20:03:44

标签: c++ syntax-error

#include <iostream>
using namespace std;

class date 
{
   int day,year,month;
   int add,subt;

   public:
   date ()
   {
      day = 17;
      year = 2019;
      month = 3;
      add = 0;
      subt = 0;     
   }    

   void recent_date ()
   {
    cout<<"Recent date   :    "<<day<<"/"<<month<<"/"<<year;
   }

   void adding ()
   {
    cout<<endl<<"How many days you want to go in a future  :   ";
    cin>>add;
   }

   date operator+()
   {
        date temp;
        temp = (day,month,year);
        day += temp.add;

        if (day > 31 && month == 1 || month == 3 || month == 5 || month == 7 || month == 8 ||month == 10 || month == 12)
           {
               temp.month++;
               day = temp.day - 31;
               year = temp.year;        
           }
           return temp;
   }
};

main ()
{
    date obj;
    obj.recent_date();
    obj.adding();
    obj=temp++;
    obj.recent_date();
}

我收到语法错误,程序没有运行。

我想通过接受用户输入来增加日期。 但是,它无法正常运行。

有人可以帮我解释一下此代码吗?

2 个答案:

答案 0 :(得分:0)

有关重载增量运算符的更多信息,请参见this page

简而言之,这四个运算符是不同的:

operator+(T) // addition
operator+()  // unary plus
operator++() // prefix increment (++x)
operator++(int) // postfix increment (x++)

您似乎想重载的是后缀增量。

感谢@BenVoigt指出我跳过了一元加号。

答案 1 :(得分:0)

您打电话给temp++,但从未定义过执行该操作的人。

这使用后缀增量,它可能看起来像这样:

date operator++(int)
{
   // ...
}

我的假设是您打算这样做,而不是date operator+()

按照mhhollomon的回答,您可能也希望使其他一些运算符重载,以获得可靠的接口。