Вопрос по c++, inheritance – ошибка C2614: «ChildClass»: недопустимая инициализация члена: «var1» не является базой или членом

13

Я получаю следующую ошибку в C ++:

error C2614: 'ChildClass' : illegal member initialization: 'var1' is not a base or member

Class Base 
{
    protected:
    int var1;
public:
    Base()
    {
        var1=0;
    }
}


class Child : public Base
{
    int chld;
    public: 
    Child() : var1(0)
    {
        chld=1;
    }
}

Я чувствую, что я сделал согласно протоколу ОО. Вотvar1 является членом данных базового класса с защищенным в качестве спецификатора доступа. Таким образом, это может быть унаследовано, и это станет частным у ребенка.

Don't understand why am I getting the error?

Как вы думаете, почему "это станет частным в детстве"? Ben Voigt
У вас также есть куча ошибок в вашем коде:Class Base должно бытьclass Base, Вы пропускаете точки с запятой после каждого занятия. Mysticial

Ваш Ответ

2   ответа
23

по которой вас выдает сообщение об ошибке: вы можете использовать списки инициализаторов только с прямыми членами или базовыми классами.

В вашем случае вам даже не нужно инициализировать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)
    {
    }
};
Error: User Rate Limit ExceededBase(int x)Error: User Rate Limit Exceededprotected.
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;
      }
};
Error: User Rate Limit Exceeded codeLover

Похожие вопросы