类相关的一个小问题,求解

CrazyBW 2013-04-06 08:35:14

class Person
{
public:
Person(ifstream& isf):is(isf){}
Person(istream &os = cin){}
private:
ifstream& is;
};


这段代码报错,哪里错了?????

错误提示:
1>d:\documents\desktop\1111\1111\1111\golf.h(11): error C2758: “Person::is”: 必须在构造函数基/成员初始值设定项列表中初始化
1> d:\documents\desktop\1111\1111\1111\golf.h(13) : 参见“Person::is”的声明
...全文
95 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
笨蛋糕 2013-04-07
  • 打赏
  • 举报
回复
class Person { public: Person(ifstream& isf):is(isf){} Person(istream &os = cin)is(cin){} private: ifstream& is; };那你在初始化列表中初始化不就行了。
oKanXue1 2013-04-06
  • 打赏
  • 举报
回复
引用 楼主 CrazyBW 的回复:
C/C++ code?12345678class Person{public: Person(ifstream& isf):is(isf){} Person(istream &os = cin){}private: ifstream& is;}; 这段代码报错,哪里错了????? 错误提示: 1>d:\documen……
改成
class Person
{
public:
    Person(ifstream& isf):is(isf){}
    Person(istream &os = cin)is(cin){}
private:
    ifstream& is;
};
看错了,是引用变量必须初始化,if有默认构造,io没有。。。
佑勿勿 2013-04-06
  • 打赏
  • 举报
回复
ifstream& is引用类型必须对应有左值对象的,也就是编译器必须知道它是谁的引用
zhaingbo 2013-04-06
  • 打赏
  • 举报
回复
ifstream& is
被定义为引用类型,但是在第二个重载的构造函数中并没有初始化。
oKanXue1 2013-04-06
  • 打赏
  • 举报
回复
你的默认构造函数Person(istream &os = cin){},假设你
Person a;
那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表

64,648

社区成员

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

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