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!
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.
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.
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.
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] }
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?
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.
ParaSiempre Geschrieben 27. September 2006 Autor Geschrieben 27. September 2006 Alles klar! Vielen Dank (auch an Anybody)! Und Gruß nach Essen aus Dorsten. *g*
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden