我正在用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
是保护作为访问符基类的数据成员。 因此它可以被继承,它会成为孩子的私人。
不明白为什么我收到错误?
它不为错误信息为您提供的确切原因的工作:你只能使用初始化列表直接成员或基类。
在你的情况,你甚至都不需要初始化var1
,因为Base::Base()
将被称为Child
的构造函数,将设置var1
至0
。
如果你想有一个不同的值,你就必须重载Base
构造,并明确调用它:
class Base
{
protected:
int var1;
public:
Base() : var1(0)
{
}
Base(int x) : var1(x)
{
}
};
class Child:public Base
{
int chld;
public:
Child(): Base(42) , chld(1)
{
}
};
你不能只初始化当前类的基类中的一员。 在基类中使用参数的构造函数。
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;
}
};
文章来源: error C2614: 'ChildClass' : illegal member initialization: 'var1' is not a base or member