2010-12-04 10 views
10

Ich habe mein Problem reduziert bis auf den folgenden Beispielcode:Standardkonstruktor für eine vererbte Klasse

class pokemon{ 
    public: 
     pokemon(int n); 
}; 

class MewTwo : public pokemon { 
    public: 
     MewTwo(int n); 
}; 

MewTwo::MewTwo(int n) {} 

, die einen Fehler erzeugt:

no matching function for call to ‘pokemon::pokemon()’

Was Ich denke geschieht ist, dass Ein Standardkonstruktor für Pokemon wird aufgerufen, wenn ich versuche, den MewTwo-Konstruktor zu schreiben, der nicht existiert. Ich bin relativ neu in C++, also rate ich nur hier. Irgendwelche Ideen?

Zurückhaltung: Fixes können keine öffentlichen Member zu den Klassen ändern oder hinzufügen.

Antwort

13

Eigentlich, was Sie suchen ist die Initialisierungsliste. Ändern Sie den geerbten Klassenkonstruktor wie folgt:

class MewTwo : public pokemon { 
    public: 
     MewTwo(int n) : pokemon(n) {} 
}; 

Sie haben richtig identifiziert, was vorging. Wenn Sie die geerbte Klasse erstellen, erstellen Sie zuerst die Basisklasse und Sie können das nicht tun, da kein Standardkonstruktor definiert ist. Mitgliederinitialisierungslisten helfen Ihnen, das zu umgehen :)

Check out: http://www.cprogramming.com/tutorial/initialization-lists-c++.html für weitere Beispiele!

+1

Ich habe noch nie von Mitgliedsinitialisierungslisten gehört, danke für den Link, der jetzt vollkommen Sinn macht! :) – Coltin

5

Try this:

class pokemon{ 
    public: 
     pokemon(int n); 
}; 

class MewTwo : public pokemon { 
    public: 
     MewTwo(int n) :pokemon(n){} 
}; 
+4

+1. Basisklassen und Member werden initialisiert, bevor der Konstruktorcode einer abgeleiteten Klasse ausgeführt wird. Wenn Sie nicht möchten, dass der Standardkonstruktor für diesen Zweck verwendet wird, müssen Sie angeben, welcher Konstruktor verwendet werden soll und welche Parameter übergeben werden sollen. Dies wird mit der Initialisierungsliste wie gezeigt durchgeführt. In der Basisklasse haben Sie einen Konstruktor definiert, der die Erstellung eines Standardkonstruktors unterdrückt. –

Verwandte Themen