这个重载错误原因是什么?

zhuix7788 2015-11-13 10:51:22
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;
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2015-11-13
  • 打赏
  • 举报
回复
包含头文件:#include <string> friend istream& operator>>(istream& is, const Person& p) 这句不要const,否则无法修改
jiht594 2015-11-13
  • 打赏
  • 举报
回复
引用 3 楼 Tianluoyuge 的回复:
重载的插入运算符的第二个参数不能为const const表示在这个函数内不可以修改p的内容
其实都不好
jiht594 2015-11-13
  • 打赏
  • 举报
回复
error: cannot bind 'std::istream {aka std::basic_istream<char>}' lvalue to 'std::basic_istream<char>&&'| stl编译错误不好看,你的这个提示的不好
Tianluoyuge 2015-11-13
  • 打赏
  • 举报
回复
重载的插入运算符的第二个参数不能为const const表示在这个函数内不可以修改p的内容
PoorMonk丶 2015-11-13
  • 打赏
  • 举报
回复
>>运算符的第二个参数,不能为const
zhuix7788 2015-11-13
  • 打赏
  • 举报
回复
is >> p.name;这行有错
CyberLogix 2015-11-13
  • 打赏
  • 举报
回复
friend istream& operator>>(istream& is, Person& p) //去掉const { is >> p.name; return is; }
醉江楼 2015-11-13
  • 打赏
  • 举报
回复
重载>>要注意第二个参数不能为const对象,因为>>是写入,会修改对象。 所以吧,一定得清楚什么时候需要const,什么时候不需要const,不是随便用的。

64,648

社区成员

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

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