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){},假设你
那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表
Person a;
那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表
#2
ifstream& is
被定义为引用类型,但是在第二个重载的构造函数中并没有初始化。
#3
ifstream& is引用类型必须对应有左值对象的,也就是编译器必须知道它是谁的引用
#4
改成
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;
};那你在初始化列表中初始化不就行了。
{
public:
Person(ifstream& isf):is(isf){}
Person(istream &os = cin)is(cin){}
private:
ifstream& is;
};那你在初始化列表中初始化不就行了。
#1
你的默认构造函数Person(istream &os = cin){},假设你
那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表
Person a;
那么io对象没有被初始化,而io是没有默认构造函数的,所以必须在初始化列表
#2
ifstream& is
被定义为引用类型,但是在第二个重载的构造函数中并没有初始化。
#3
ifstream& is引用类型必须对应有左值对象的,也就是编译器必须知道它是谁的引用
#4
改成
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;
};那你在初始化列表中初始化不就行了。
{
public:
Person(ifstream& isf):is(isf){}
Person(istream &os = cin)is(cin){}
private:
ifstream& is;
};那你在初始化列表中初始化不就行了。