C++运算符重载一道简单问题求助!!

Ba_hu 2019-11-05 06:44:21
#include <iostream>
using namespace std;
class Time
{
public:
Time();

friend ostream& operator<<(ostream& cout, Time& t);

Time& operator++()
{
this->sec++;
return *this;
}

Time operator++(int)
{
Time temp = *this;
this->sec++;
return temp;
}

private:
int sec;
};

Time::Time()
{
sec = 0;
}

ostream& operator<<(ostream& cout, Time& t)
{
cout << t.sec;
return cout;
}

int main()
{
Time t;
cout << t++ << endl;
cout << t << endl;
cout << ++(++t) << endl;
cout << t << endl;
system("pause");
return 0;
}



41行报错 没有与这些操作数匹配的 "<<" 运算符 不知道为什么,求大神解答!
...全文
843 43 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ba_hu 2020-12-01
  • 打赏
  • 举报
回复
引用 46 楼 .新酱memor4 的回复:
刚才看了一下,确实是++(int) 临时变量传递给函数时候,如果是Time&,也可能会修改到临时变量,但是临时变量是不能修改的,所以就不允许对应到Time&,所以临时变量只能对应到Time或者const Time&
2
  • 打赏
  • 举报
回复
刚才看了一下,确实是++(int) 临时变量传递给函数时候,如果是Time&,也可能会修改到临时变量,但是临时变量是不能修改的,所以就不允许对应到Time&,所以临时变量只能对应到Time或者const Time&
这是个假号 2019-11-14
  • 打赏
  • 举报
回复
引用 45 楼 这是个假号的回复:
我第一眼就只看到你后置加加那个函数返回了一个局部变量temp
噢这里没问题看溜了哈哈
这是个假号 2019-11-14
  • 打赏
  • 举报
回复
我第一眼就只看到你后置加加那个函数返回了一个局部变量temp
早伤好 2019-11-13
  • 打赏
  • 举报
回复
t++相当于是返回一个与t值一样的副本然后给原本的t增一,返回的是右值;++t是先给t增一然后返回对t的引用,这个是左值。你重载的时候类型是Time& t那就要求这个参数t必须是左值,解决方法是改成const Time& t或者再写一个Time&& t的重载。
铖邑 2019-11-06
  • 打赏
  • 举报
回复
引用 36 楼 qq_45810669 的回复:
这么长。兄弟你牛(ー_ー)!!
看懂了吗?怎么没看到你发代码啊?
  • 打赏
  • 举报
回复
这么长。兄弟你牛(ー_ー)!!
shuaibifeitian 2019-11-06
  • 打赏
  • 举报
回复
我也有这个问题
hua397245854 2019-11-06
  • 打赏
  • 举报
回复
刚才看了一下,确实是++(int) 临时变量传递给函数时候,如果是Time&,也可能会修改到临时变量,但是临时变量是不能修改的,所以就不允许对应到Time&,所以临时变量只能对应到Time或者const Time&
weixin_40364852 2019-11-06
  • 打赏
  • 举报
回复
重载运算符真的很费劲儿啊
闆運厷 2019-11-05
  • 打赏
  • 举报
回复
应该是变量改动,类型不符合的问题
Ba_hu 2019-11-05
  • 打赏
  • 举报
回复
引用 32 楼 SuperDay 的回复:
刚才看了一下,确实是++(int)
临时变量传递给函数时候,如果是Time&,也可能会修改到临时变量,但是临时变量是不能修改的,所以就不允许对应到Time&,所以临时变量只能对应到Time或者const Time&
我懂了!感谢大神解答!
铖邑 2019-11-05
  • 打赏
  • 举报
回复
刚才看了一下,确实是++(int) 临时变量传递给函数时候,如果是Time&,也可能会修改到临时变量,但是临时变量是不能修改的,所以就不允许对应到Time&,所以临时变量只能对应到Time或者const Time&
weixin_42216860 2019-11-05
  • 打赏
  • 举报
回复
不加会出错的吧
Ba_hu 2019-11-05
  • 打赏
  • 举报
回复
引用 28 楼 SuperDay 的回复:
没听说有占位这一说,印象中后置运算符是友元,你不想深究就罢了

不过还是想请教一下为什么返回temp形参的指针一定要加const?
铖邑 2019-11-05
  • 打赏
  • 举报
回复
没听说有占位这一说,印象中后置运算符是友元,你不想深究就罢了
Ba_hu 2019-11-05
  • 打赏
  • 举报
回复
引用 25 楼 SuperDay 的回复:
我觉得可能跟这个++(int)有关系,这个并不是前置运算符,它没指定参数会有影响。前置运算符++,应该是友元,而不是成员,你再试试看
我们好像都没理解彼此的意思,有int的是后置,没int的是前置。。。不过你之前说的加const已经解决了这个问题,还是感谢!
Ba_hu 2019-11-05
  • 打赏
  • 举报
回复
引用 25 楼 SuperDay 的回复:
我觉得可能跟这个++(int)有关系,这个并不是前置运算符,它没指定参数会有影响。前置运算符++,应该是友元,而不是成员,你再试试看
++(int)里的int不是占位符嘛?代表后置运算,为了和前置的重载函数区分
铖邑 2019-11-05
  • 打赏
  • 举报
回复
我觉得可能跟这个++(int)有关系,这个并不是前置运算符,它没指定参数会有影响。前置运算符++,应该是友元,而不是成员,你再试试看
Never妥协 2019-11-05
  • 打赏
  • 举报
回复
我编译了还是没有报错
加载更多回复(23)

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧