求解释自定义运算符的问题

weixin_45047527 2019-05-24 10:17:30
#include<iostream> using namespace std; class Person { friend ostream& operator << (ostream& cout, Person& p);//作用是定义友元函数,使函数能够访问私有作用域 public: Person() { m_num = 0; } Person& operator++()//这是前置递增运算符 { m_num++; return *this; } Person operator++(int) { Person temp = *this; m_num++; return temp; } private: int m_num; }; ostream& operator << (ostream& cout, Person& p)//对左移运算符进行重定义 { cout << p.m_num;//定义需要输出的数据Person类型的具体成员数据 return cout; //返回retrun是为了后面可以继续链式输出 } void test01() { Person p; cout << p << endl; } void test02() { Person j; cout << ++j << endl; cout << j << endl; } void test03() { Person k; cout << k++ << endl; cout << k << endl; } int main() { //test01(); //test02(); test03(); system("pause"); return 0; } 代码如上,为何只有test03中 cout<<k++<<endl;这一段中间第一个左移运算符提示输出类型不匹配,我已经定义了左移运算符的输出类型了,求解释
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45047527 2019-05-28
  • 打赏
  • 举报
回复
引用 4 楼 幻夢之葉的回复:
VC下没有什么问题,你什么编译器? 不过最好改成 ostream& operator << (ostream& cout, const Person& p)
用的vc2019,一直不明白bug出在哪,郁闷
幻夢之葉 2019-05-26
  • 打赏
  • 举报
回复
VC下没有什么问题,你什么编译器? 不过最好改成 ostream& operator << (ostream& cout, const Person& p)
CaptainXue 2019-05-25
  • 打赏
  • 举报
回复
那是因为你的后置++的重载写错了 应该改为:temp.m_num++
weixin_45047527 2019-05-25
  • 打赏
  • 举报
回复
引用 1 楼 袁君元的回复:
那是因为你的后置++的重载写错了 应该改为:temp.m_num++
不对,兄弟,我琢磨了一下,为什么前置的数据没问题呢,而且bug的类型是输出的数据类型不匹配
weixin_45047527 2019-05-25
  • 打赏
  • 举报
回复
引用 1 楼 袁君元的回复:
那是因为你的后置++的重载写错了 应该改为:temp.m_num++
感谢兄弟,找了一晚上没注意到

64,654

社区成员

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

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