2010-09-15 6 views
6

Im Moment habe ich eine Klasse A, die von Klasse B erbt, und B hat keinen Standardkonstruktor. Ich versuche, die einen Konstruktor für A erstellen, die exakt die gleichen Parameter für B ‚s Konstruktor hat, aber ich bekomme:Klasse geerbt von Klasse ohne Standardkonstruktor

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

Wie würde ich diesen Fehler beheben?

+0

Bitte senden Sie Ihren aktuellen Code –

+0

@Ramon Zarazua - warum? Ich habe bereits die Antwort bekommen ... – wrongusername

Antwort

14

Der Konstruktor sollte wie folgt aussehen:

A(int i) : B(i) {} 

Das Bit nach dem Doppelpunkt bedeutet, „das B-Basisklasse Unter initialisieren Objekt dieses Objekt seines int Konstruktor, mit dem Wert i“.

Ich vermute, dass Sie keinen Initialisierer für B zur Verfügung gestellt haben, und daher versucht der Compiler standardmäßig, ihn mit dem nicht existenten Konstruktor no-args zu initialisieren.

+0

Danke für die Erklärung, was das bedeutet, Steve! Ich wusste nicht, dass es einen Initialisierer gab – wrongusername

2

Sie müssen den Basiskonstruktor über die Initialisierungsliste Ihrer Klasse aufrufen.

Beispiel:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

Wenn Sie initialisieren B nicht explizit wird es versuchen, den Standard-Konstruktor zu verwenden, die keine Parameter hat.

Verwandte Themen