Ich versuche, einen Konstruktor mit einem Standardwert zu erstellen. Die Komplikation ergibt sich aus der Verwendung separater Header- und Codedateien für die Klasse. Ich habe eine Header-Datei, die enthält:
%Vor%Und eine Codedatei mit:
%Vor% Wenn ich versuche, mit g ++ zu kompilieren (d. h. g++ -c foo.cc
), gibt es einen Fehler:
Was mache ich falsch?
Der Standard kann nur in die Header-Datei gehen. Und die Verwendung von Standardwerten in Konstruktoren (oder anderen Funktionen) ist nach meiner Erfahrung selten eine gute Idee - normalerweise klumpt es irgendwo von einem Klumpen. Um nicht zu sagen, es gibt nicht wenige in meinem eigenen Code!
Geben Sie nicht den Standardwert in der Definition an:
%Vor%Jetzt ist es korrekt. Der Standardwert sollte nur in der -Deklaration angegeben werden, die Sie in der Header-Datei vorgenommen haben.
Verwenden Sie übrigens lieber die member-initialization-list over Zuweisungen:
Und natürlich, wenn seine Deklaration-mit-Definition, dann müssen Sie den Standardwert (wenn Sie es wollen) direkt in der Deklaration-cum-Definition:
%Vor%Der Standardwert muss nur in der Deklaration der Funktion sein, wenn die Deklaration und die Definition getrennt sind.
Sie könnten den Standardwert als Kommentar hinzufügen, wenn Sie möchten, aber Sie sollten sich darüber im Klaren sein, dass das Ändern des Vorschlagswerts und das Vergessen des Kommentars zu irreführenden Ergebnissen führen kann (:
Zum Beispiel:
%Vor%Tags und Links class c++ constructor default-value