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

c++, inheritance, parent-child

Solution

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

Problem

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?

Original source