ParaSiempre Geschrieben 27. September 2006 Geschrieben 27. September 2006 Guten Morgen! Bin gerade dabei den Umgang mit Konstruktoren von Klassen in C++ zu erlernen. Dazu schreibe ich eine Klasse cwagen. Dabei hat mir mein Lehrer folgende Möglichkeit genannt: cwagen::cwagen(string marke = "Ford") { [INDENT]this -> marke = marke;[/INDENT] } Damit soll angeblich die Angabe eines Parameters bei der Definition eines neuen Objekts optional sein, also das Folgende verkürzen: cwagen::cwagen(string marke) { [INDENT]this -> marke = marke;[/INDENT] } cwagen::cwagen(void) { [INDENT]this -> marke = "Ford";[/INDENT] } Allerdings bricht der Compiler (Dev-C++) an der Stelle, an der ich ein neues Objekt definiere mit der Fehlermeldung "no matching function for call to `cwagen::cwagen()'" ab. Nun meine Frage: Ist es überhaupt möglich diese Verkürzung zu verwenden und wenn ja, wo liegt der Fehler? Im Voraus vielen Dank! Zitieren
Anybody Geschrieben 27. September 2006 Geschrieben 27. September 2006 Also ich würde das nicht als Verkürzung bezeichnen. Es ist nur eine Art einen optionalen Parameter anzugeben. Nen Standardkonstruktor braucht man immer, egal was man tut. Das andere ist nur eine Überladung von dem Konstruktor, welcher dir die Möglichkeit gibt, einen Parameter anzugeben. Zitieren
ParaSiempre Geschrieben 27. September 2006 Autor Geschrieben 27. September 2006 Verkürzung in dem Sinne, dass ich nur einen statt zwei Konstruktoren schreiben muss (und damit weniger Zeichen eintippen muss. Zitieren
Klotzkopp Geschrieben 27. September 2006 Geschrieben 27. September 2006 Allerdings bricht der Compiler (Dev-C++) an der Stelle, an der ich ein neues Objekt definiere mit der Fehlermeldung "no matching function for call to `cwagen::cwagen()'" ab.Der Defaultparameter muss in der Deklaration des Konstruktors angegeben werden, nicht in der Definition. Zitieren
ParaSiempre Geschrieben 27. September 2006 Autor Geschrieben 27. September 2006 Jetzt bin ich verwirrt. Ich meinte eigentlich die Stelle: int main(int argc, char *argv[]) { [INDENT]cwagen wagen;[/INDENT] } Zitieren
ParaSiempre Geschrieben 27. September 2006 Autor Geschrieben 27. September 2006 Hab den Fehler gefunden. Durfte den Default-Konstruktor nicht in die Datei cwagen.cpp schreiben, sondern er muss in cwagen.h. Gibts einen bestimmten Grund dafür, dass man einen Konstruktor nicht wie "normale" Methoden in die cwagen.cpp auslagern kann? Zitieren
Klotzkopp Geschrieben 27. September 2006 Geschrieben 27. September 2006 Gibts einen bestimmten Grund dafür, dass man einen Konstruktor nicht wie "normale" Methoden in die cwagen.cpp auslagern kann?Das hat nichts damit zu tun, dass das ein Konstruktor ist. Defaultparameter müssen bei der Methodendeklaration stehen (in deinem Fall in der Headerdatei), das ist alles. Zitieren
ParaSiempre Geschrieben 27. September 2006 Autor Geschrieben 27. September 2006 Alles klar! Vielen Dank (auch an Anybody)! Und Gruß nach Essen aus Dorsten. *g* Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.