FAstril 2021-05-10 17:36 采纳率: 100%
浏览 19
已采纳

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

#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: 语法错误 : 缺少“;”(在“.”的前面)

     }

  • 写回答

2条回答 默认 最新

  • HMJ_ 2021-05-11 10:38
    关注
    #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里面东西解释的很清晰的,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示