报错:
[Error] no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'Person')
代码:
#include<iostream>
using namespace std;
class Person{
friend ostream& operator<<(ostream &cout, Person &p);
private:
string name;
int age;
public:
Person(string s="zs",int age = 10):name(s),age(age){}
Person& operator++(){//前缀++
++age;
return *this;
}
Person operator++(int){ //后缀++
Person temp;
++age;
return temp;
}
};
ostream& operator<<(ostream &cout, Person &p){
cout << p.age ;
return cout;
}
void f(){
Person p;
cout << p++ << " " << p <<endl; //报错位置
return p;
}
int main(){
Person p;
f();
return 0;
}
分析:在调用出错位置的语句时,首先调用重载的p++,这时函数返回一个Person类临时对象,查阅分析知:因为临时对象只能读,不能写,此时的函数返回值可以视为一个const Person对象,也就是一个左值。
所以调用cout时会发生类型不匹配的错误。修改方法:重载输出函数的参数改为operator<<(ostream &cout, const Person &p);
ostream& operator<<(ostream &cout,const Person &p);
修改后结果: