C ++: Initialisierung des geerbten Feldes
Ich habe eine Frage zur Initialisierung von geerbten Mitgliedern im Konstruktor der abgeleiteten Klasse. Beispielcode:
class A
{
public:
int m_int;
};
class B: public A
{
public:
B():m_int(0){}
};
Dieser Code gibt Folgendes aus:
In constructor 'B::B()': Line 10: error: class 'B' does not have any field named 'm_int'
(sehenhttp: //codepad.org/tn1weFF)
Ich vermute, warum das passiert?m_int
sollte Mitglied von @ seB
und ElternklasseA
sollte bereits bei der Initialisierung von @ initialisiert sem_int
imB
passiert (weil übergeordnete Konstruktoren vor der Member-Initialisierung der geerbten Klasse ausgeführt werden). Wo ist ein Fehler in meiner Argumentation? Was passiert wirklich in diesem Code?
EDIT
: Ich kenne andere Möglichkeiten zum Initialisieren dieses Members (Basiskonstruktor oder Zuweisung im abgeleiteten Konstruktor), möchte aber verstehen, warum es in der Art und Weise, wie ich es versuche, illegal ist. Eine bestimmte C ++ - Sprachfunktion oder eine solche? Bitte verweisen Sie, wenn möglich, auf einen Absatz im C ++ - Standard.