为什么仍然显示没有可操作的运算符?最后两行的错误是为什么呢?

#include <iostream>
#include<cstring>
 using namespace std;
 class Time
 {
 private:
     int Hour;
     int Minute;
     int Second;
 public:
     Time();
     Time(int h,int m,int s);
     Time(const Time& T);
     Time Add(Time& T);
     Time Sub(Time& T);
     void Display();
     void setX(int a)
     {
      Hour=a;
     }
          void setY(int b)
     {
      Minute=b;
     }
              void setZ(int c)
     {
      Second=c;
     }
     friend ostream& operator<<(ostream&os,const Time&T)
     {
         os<<T.Hour<<T.Minute<<T.Second;
         return os;
     }
 }; 
      Time::Time()
     {
      Hour=0;
      Minute=0;
      Second=0;
     }
     Time::Time(const Time& T)
     {
       Hour=T.Hour;
      Minute=T.Minute;
      Second=T.Second;
     }
     Time::Time(int h,int m,int s)
     {
       Hour=h;
      Minute=m;
      Second=s;
      if(Hour>=24)
          Hour=Hour%24;
      if(Minute>=60)
          Hour=Hour+1;
          Minute=Minute%60;
           if(Second>60)
          Minute=Minute+1;
         Second=Second%60;
     }
     Time t1,t2;
      Time Time::Add(Time& T)
     {
      cout<<t1.Hour+t2.Hour<<" 时 "<<t1.Minute+t2.Minute<<" 分 "<<t1.Second+t2.Second<<" 秒  "<<endl;
     }
      Time Time::Sub(Time& T)
      {
      cout<<t1.Hour-t2.Hour<<" 时 "<<t1.Minute-t2.Minute<<" 分 "<<t1.Second-t2.Second<<" 秒  "<<endl;
     }
     void Time::Display()
     {
      cout<<Hour<<"时"<<Minute<<"分"<<Second<<"秒"<<endl;
     }
void main()
     {
      cout<<"Time1:"<<t1.setX(10)<<"时"<<t1.setY(20)<<"分"<<t1.setZ(30)<<"秒"<<endl; 

     //error C2679: 二进制“<<”: 没有找到接受“void”类型的右操作数的运算符(或没有可接受的转换)             显示这个怎么改呀?


      cout<<"Time2:"<<t2.setX(10)<<"时"<<t2.setY(15)<<"分"<<t2.setZ(30)<<"秒"<<endl;
      Time Add.Display();              //error C2143: 语法错误 : 缺少“;”(在“.”的前面)

      Time Sub.Display();              //error C2143: 语法错误 : 缺少“;”(在“.”的前面)

     }

#include <iostream>
#include <cstring>

using namespace std;

class Time
{
private:
    int Hour;
    int Minute;
    int Second;
public:
    Time();
    Time(int h,int m,int s);
    Time(const Time& T);

    Time Add(Time& T);
    Time Sub(Time& T);
    void Display();

    int setX(int a)
    {
        Hour=a;
        return Hour;
    }
    
    int setY(int b)
    {
        Minute=b;
        return Minute;
    }
    
    int setZ(int c)
    {
        Second=c;
        return Second;
    }

    friend ostream& operator<<(ostream&os,const Time&T)
    {
        os<<T.Hour<<T.Minute<<T.Second;
        return os;
    }
}; 
Time::Time()
{
    Hour=0;
    Minute=0;
    Second=0;
}
Time::Time(const Time& T)
{
    Hour=T.Hour;
    Minute=T.Minute;
    Second=T.Second;
}
Time::Time(int h,int m,int s)
{
    Hour=h;
    Minute=m;
    Second=s;
    if(Hour>=24)
        Hour=Hour%24;
    if(Minute>=60)
        Hour=Hour+1;
        Minute=Minute%60;
        if(Second>60)
        Minute=Minute+1;
        Second=Second%60;
}

Time t1,t2;

Time Time::Add(Time& T)
{
    cout<<t1.Hour+t2.Hour<<" 时 "<<t1.Minute+t2.Minute<<" 分 "<<t1.Second+t2.Second<<" 秒  "<<endl;
    return t1;
}
Time Time::Sub(Time& T)
{
    cout<<t1.Hour-t2.Hour<<" 时 "<<t1.Minute-t2.Minute<<" 分 "<<t1.Second-t2.Second<<" 秒  "<<endl;
    return t1;
}
void Time::Display()
{
    cout<<Hour<<"时"<<Minute<<"分"<<Second<<"秒"<<endl;
}

int main()
{
    cout<<"Time1:"<<t1.setX(10)<<"时"<<t1.setY(20)<<"分"<<t1.setZ(30)<<"秒"<<endl; 
    cout<<"Time2:"<<t2.setX(10)<<"时"<<t2.setY(15)<<"分"<<t2.setZ(30)<<"秒"<<endl;

    t1.Add(t2);
    t1.Display();

    t1.Sub(t2);
    t1.Display();       

    return 0;
}

改为上图就可以了;

问题1:setX函数返回类型为void,void在两个 <<之间是被禁止的,因此导致错误;

问题2:类的方法不需要重新定义,只需要使用类的实例,调用类方法即可;

 

推荐看下c++ primer里面东西解释的很清晰的,

希望对您有帮助,盼采纳:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对您有帮助,盼采纳:https://blog.csdn.net/it_xiangqiang/category_10768339.html