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