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

时间:2022-02-03 21:49:49

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”的声明

5 个解决方案

#1


你的默认构造函数Person(istream &os = cin){},假设你
Person a;

那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表

#2


ifstream& is

被定义为引用类型,但是在第二个重载的构造函数中并没有初始化。

#3


ifstream& is引用类型必须对应有左值对象的,也就是编译器必须知道它是谁的引用

#4


引用 楼主 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没有。。。

#5


class Person
{
public:
    Person(ifstream& isf):is(isf){}
    Person(istream &os = cin)is(cin){}
private:
    ifstream& is;
};那你在初始化列表中初始化不就行了。

#1


你的默认构造函数Person(istream &os = cin){},假设你
Person a;

那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表

#2


ifstream& is

被定义为引用类型,但是在第二个重载的构造函数中并没有初始化。

#3


ifstream& is引用类型必须对应有左值对象的,也就是编译器必须知道它是谁的引用

#4


引用 楼主 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没有。。。

#5


class Person
{
public:
    Person(ifstream& isf):is(isf){}
    Person(istream &os = cin)is(cin){}
private:
    ifstream& is;
};那你在初始化列表中初始化不就行了。