class Person { public: Person(){}; ~Person(){}; friend ostream& operator<<(ostream& os, const Person& p) { os << "本人是" << p.name << ", 今年" << p.age << "身高" << p.tall << ",体重" << p.weight << ".\n"; return os; } friend istream& operator>>(istream& is, const Person& p) { is >> p.name; return is; } private: string name; int age; int tall; int weight; };
出错信息:
cannot convert ‘p.Person::name’ (type ‘const string {aka const std::basic_string<char>}’) to type ‘signed char*’
is >> p.name;
解决方案:4分
>>运算符的第二个参数,不能为const
解决方案:4分
重载的插入运算符的第二个参数不能为const
const表示在这个函数内不可以修改p的内容
const表示在这个函数内不可以修改p的内容
解决方案:4分
包含头文件:#include <string>
friend istream& operator>>(istream& is, const Person& p) 这句不要const,否则无法修改
friend istream& operator>>(istream& is, const Person& p) 这句不要const,否则无法修改
解决方案:4分
重载>>要注意第二个参数不能为const对象,原因是>>是写入,会修改对象。
所以吧,一定得清楚什么时候需要const,什么时候不需要const,不是随便用的。
所以吧,一定得清楚什么时候需要const,什么时候不需要const,不是随便用的。
解决方案:4分
friend istream& operator>>(istream& is, Person& p) //去掉const
{
is >> p.name;
return is;
}
{
is >> p.name;
return is;
}