C++: Initialization of inherited field
Solution 1:
You need to make a constructor for A (it can be protected so only B can call it) which initializes m_int just as you have, then you invoke :A(0)
where you have :m_int(0)
You could also just set m_int = 0
in the body of B's constructor. It is accessible (as you describe) it's just not available in the special constructor syntax.
Solution 2:
In order to construct an instance of class B
you first instantiate an instance of class A
. During that instantiation m_int
gets initialized. It's after that intialization that b
's constructor is called, so you can't reinitialize m_int
. If that's your goal then you can implement a constructor for A
that takes an int and then call that in B
's initialization list:
class A
{
public:
A(int x): m_int(x) {}
int m_int;
};
class B: public A
{
public:
B(): A(2) {}
};