错误C2614:“ChildClass”:非法成员初始化:“VAR1”不是碱或构件(error C2

2019-06-23 14:41发布

我正在用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是保护作为访问符基类的数据成员。 因此它可以被继承,它会成为孩子的私人。

不明白为什么我收到错误?

Answer 1:

它不为错误信息为您提供的确切原因的工作:你只能使用初始化列表直接成员或基类。

在你的情况,你甚至都不需要初始化var1 ,因为Base::Base()将被称为Child的构造函数,将设置var10

如果你想有一个不同的值,你就必须重载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)
    {
    }
};


Answer 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;
      }
};


文章来源: error C2614: 'ChildClass' : illegal member initialization: 'var1' is not a base or member