I've a question about initialization of inherited members in constructor of derived class. Example code:
class A
{
public:
int m_int;
};
class B: public A
{
public:
B():m_int(0){}
};
This code gives me the following output:
In constructor 'B::B()':
Line 10: error: class 'B' does not have any field named 'm_int'
(see http://codepad.org/tn1weFFP)
I'm guessing why this happens? m_int
should be member of B
, and parent class A
should already be initialized when initialization of m_int
in B
happens (because parent constructors run before member initialization of inherited class). Where is a mistake in my reasoning? What is really happens in this code?
EDIT
: I'm aware of other possibilities to initialize this member (base constructor or assignment in derived constructor), but I want to understand why is it illegal in the way I try it? Some specific C++ language feature or such? Please point me to a paragraph in C++ standard if possible.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…