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

前端 未结 2 409
无人共我
无人共我 2020-12-31 07:20

I am getting the following error in C++:

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

相关标签:
2条回答
  • 2020-12-31 07:37

    You can't initialize a member of a base class, only of the current class. Use a parameterized constructor in the base class.

    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;
          }
    };
    
    0 讨论(0)
  • 2020-12-31 07:54

    It doesn't work for the exact reason the error message provides you: you can only use initializer lists with direct members or base classes.

    In your case, you don't even need to initialize var1, since Base::Base() will be called by Child's constructor, which will set var1 to 0.

    If you want a different value, you'll have to overload Base constructor and call it explicitly:

    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)
        {
        }
    };
    
    0 讨论(0)
提交回复
热议问题