派生クラスのコンストラクターで継承されたメンバーの初期化について質問があります。コード例:
class A
{
public:
int m_int;
};
class B: public A
{
public:
B():m_int(0){}
};
このコードは私に次の出力を与えます:
In constructor 'B::B()':
Line 10: error: class 'B' does not have any field named 'm_int'
(http://codepad.org/tn1weFFPを参照)
なぜこれが起こるのか推測していますか?m_int
のメンバーである必要があり、 inの初期化が発生したときにB
親クラスA
がすでに初期化されている必要があります(親コンストラクターは継承されたクラスのメンバー初期化の前に実行されるため)。私の推論の間違いはどこにありますか?このコードで実際に何が起こっているのでしょうか?m_int
B
EDIT
:このメンバーを初期化する他の可能性(ベースコンストラクターまたは派生コンストラクターの割り当て)を知っていますが、それを試す方法でなぜ違法なのかを理解したいのですが?いくつかの特定のC++言語機能など?可能であれば、C++標準の段落を教えてください。