Ошибка C2614: "ChildClass": незаконная инициализация члена: "var1" не является базой или членом
Я получаю следующую ошибку в С++:
ошибка 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, защищенным как спецификатор доступа. Таким образом, он может быть унаследован, и он станет частным в ребенке.
Не понимаю, почему я получаю сообщение об ошибке?
Ответы
Ответ 1
Это не работает по той причине, что сообщение об ошибке предоставляет вам: вы можете использовать только списки инициализаций с прямыми членами или базовыми классами.
В вашем случае вам даже не нужно инициализировать 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)
{
}
};
Ответ 2
Вы не можете инициализировать элемент базового класса, только текущего класса. Использовать параметризованный конструктор в базовом классе.
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;
}
};