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

时间:2012-04-13 09:31:44

标签: c++ inheritance parent-child

我在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是Base类的数据成员,protected作为访问说明符。所以它可以被遗传,它会变成私人的。

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

2 个答案:

答案 0 :(得分:23)

由于错误消息为您提供的确切原因,它不起作用:您只能将初始化程序列表与直接成员或基类一起使用。

在您的情况下,您甚至不需要初始化var1,因为Base::Base()的构造函数将调用Child,这会将var1设置为{ {1}}。

如果你想要一个不同的值,你必须重载0构造函数并明确地调用它:

Base

答案 1 :(得分: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;
      }
};