一个输出运算符与递增运算符重载的问题

qq_28254805 2018-12-14 11:01:44
#include <iostream>
#include <string>
using namespace std;

class Person
{
private:
string name;
int age;

public:
Person(string str, int age)
{
this->name = str;
this->age = age;
}
Person &operator++()
{
this->age++;
return *this;
}
Person operator++(int)
{
Person temp = *this;
this->age++;
return temp;
}
friend ostream &operator<<(ostream &cout, Person &person);

};
ostream &operator<<(ostream &cout, Person &person)
{
cout << "name: " << person.name << " age: " << person.age;
return cout;
}


int main()
{
Person p1 = {"zhang", 14};
Person p2 = {"wang", 23};

cout << ++p1 << endl;
cout << p1 << endl;
cout << "-----------" << endl;
cout << p2++ << endl; //报错,没有匹配操作符
cout << p2 << endl;

cin.get();
return 0;
}

为什么cout<<p2++<<endl;的时候报错,提示没有匹配操作符 std::ostream << Person
问题是我已经重载了<<,cout<<++p1<<endl;就不会报错
...全文
150 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
636f6c696e 2018-12-15
  • 打赏
  • 举报
回复
为啥会有空格
_ZGq 2018-12-15
  • 打赏
  • 举报
回复
因为ostream参数列表里传的是一个引用,p2++返回的是右值(即Person),不能转换到Person&类型。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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