Подтвердить что ты не робот

Ошибка 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, защищенным как спецификатор доступа. Таким образом, он может быть унаследован, и он станет частным в ребенке.

Не понимаю, почему я получаю сообщение об ошибке?

4b9b3361

Ответ 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;
      }
};