Veröffentlicht 27. September 200618 j 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!
27. September 200618 j 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.
27. September 200618 j Verkürzung in dem Sinne, dass ich nur einen statt zwei Konstruktoren schreiben muss (und damit weniger Zeichen eintippen muss.
27. September 200618 j 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.
27. September 200618 j Jetzt bin ich verwirrt. Ich meinte eigentlich die Stelle: int main(int argc, char *argv[]) { [INDENT]cwagen wagen;[/INDENT] }
27. September 200618 j 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?
27. September 200618 j 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.
27. September 200618 j Alles klar! Vielen Dank (auch an Anybody)! Und Gruß nach Essen aus Dorsten. *g*
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.