class Parent
{
public:
int member;
Parent():
member(0)
{
}
};
class Child:
public Parent
{
public:
Child():
member(1) //error
{
}
};
答案 0 :(得分:6)
class Parent{
private:
int member;
public:
Parent():
member(0){
}
protected:
explicit Parent(int x):
member(x){
}
};
class Child:
public Parent {
public:
Child():
Parent(1){
}
};
答案 1 :(得分:1)
将您的代码更改为:
class Child:
public Parent
{
public:
Child()
{
member = 1;
}
};
或尝试:
class Child:
public Parent
{
public:
Child():Parent(),member(1)
{
}
};
答案 2 :(得分:1)
class Parent
{
public:
int member;
Parent(int m = 0):
member(m) // constructor takes an argument, default as 0
{
}
};
class Child:
public Parent
{
public:
Child():
Parent(1) // refer to super class's constructor here
{
}
};
答案 3 :(得分:0)
只需在函数体中使用member = 1;
。
说明:初始化列表仅适用于类的自己的字段(包括父类的构造函数)。除此之外,将首先构造父类(因此,当您的子类被构造时,它的初始化列表已经被执行),因此您的代码将再次构造成员,这是没有意义的。
答案 4 :(得分:0)
初始化列表允许使用除默认构造函数之外的其他构造函数。显然,Child构造函数不能选择除Parent构造函数之外的任何东西。所以有两个解决方案: