错误 C2614:'ChildClass':非法成员初始化:'var1'不是基或成员

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

本文关键字:成员 var1 非法 C2614 ChildClass 错误 初始化      更新时间:2023-10-16

我在C++中收到以下错误:

错误 C2614:"子类":非法成员初始化:"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;
      }
};