我在C ++中遇到以下错误:
错误C2614:'ChildClass':非法成员初始化:'var1'是 不是基地或会员
Class Base
{
protected:
int var1;
public:
Base()
{
var1=0;
}
}
class Child : public Base
{
int chld;
public:
Child() : var1(0)
{
chld=1;
}
}
我觉得我所做的是按照OO协议。
这里var1
是Base类的数据成员,protected作为访问说明符。所以它可以被遗传,它会变成私人的。
不明白我为什么会收到错误?
答案 0 :(得分:23)
由于错误消息为您提供的确切原因,它不起作用:您只能将初始化程序列表与直接成员或基类一起使用。
在您的情况下,您甚至不需要初始化var1
,因为Base::Base()
的构造函数将调用Child
,这会将var1
设置为{ {1}}。
如果你想要一个不同的值,你必须重载0
构造函数并明确地调用它:
Base
答案 1 :(得分:5)
您无法初始化基类的成员,只能初始化当前类的成员。在基类中使用参数化构造函数。
Class Base
{
protected:
int var1;
Base( int var ) : var1(var)
{}
public:
Base()
{
var1=0;
}
};
class Child:public Base
{
int chld;
public:
Child():Base(0)
{
chld=1;
}
};