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

18,726

Solution 1

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)
    {
    }
};

Solution 2

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;
      }
};
Share:
18,726
codeLover
Author by

codeLover

Coding is my cardio :)

Updated on June 08, 2022

Comments

  • codeLover
    codeLover about 2 years

    I am getting the following error in 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;
        }
    }
    

    I feel what I have done is as per OO protocol. Here var1 is a data member of Base class with protected as the access specifier. So It can be inherited and it would become private in child.

    Don't understand why am I getting the error?

  • ildjarn
    ildjarn about 12 years
    The Base(int x) overload may need to be protected.