C ++ - Konstruktor Standardwert Header-Datei

8

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:

%Vor%

Was mache ich falsch?

    
Clivest 28.05.2011, 15:03
quelle

5 Antworten

12

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!

    
Neil Butterworth 28.05.2011, 15:04
quelle
8

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%     
Nawaz 28.05.2011 15:07
quelle
4

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%     
Kiril Kirov 28.05.2011 15:05
quelle
2

In C ++ (ich kenne keine anderen Sprachen) sind die Standardargumente nur ein Teil der Funktionsdeklaration & amp; keine Funktionsdefinition.

%Vor%

ist in Ordnung, ändern Sie Ihre Definition zu:

%Vor%     
Alok Save 28.05.2011 15:07
quelle
1

Es benötigt kein Standardargument in der Memberfunktionsdefinition,

%Vor%     
cpx 28.05.2011 15:06
quelle