C++: Initialisierung der geerbten Feld

Ich habe eine Frage zu der Initialisierung der geerbten member im Konstruktor der abgeleiteten Klasse. Beispiel-code:

class A
    {
public:
    int m_int;
    };

class B: public A
    {
public:
    B():m_int(0){}
    };

Dieser code gibt mir die folgende Ausgabe:

In constructor 'B::B()':
Line 10: error: class 'B' does not have any field named 'm_int'

(siehe http://codepad.org/tn1weFFP)

Ich vermute, warum dies geschieht? m_int sollte Mitglied sein B und übergeordneten Klasse A sollte bereits initialisiert, wenn die Initialisierung von m_int im B passiert (weil übergeordnete Konstruktoren ausgeführt, bevor die Initialisierung der geerbten Klasse). Wo ist ein Fehler in meiner Argumentation? Was ist wirklich passiert in diesem code?

EDIT: Ich bin mir bewusst, andere Möglichkeiten zu initialisieren dieses Mitglied (Basis-Konstruktor oder die Abtretung im abgeleiteten Konstruktor), aber ich möchte verstehen, warum ist es illegal in der Art, wie ich es versuchen? Einige spezielle C++ - Sprache-Funktion oder so? Bitte zeigen Sie mir ein Absatz im C++ - standard, wenn möglich.

InformationsquelleAutor Haspemulator | 2010-10-21
Schreibe einen Kommentar