2016-11-08 6 views
0

Zum Beispiel gibt es 3 Dateien, sum.h, sum.cpp und main.cpp.C++ - Verwirrung über die Verwendung des Standardarguments

sum.h -

... 
    int sum (int, int, int); 
    ... 

sum.cpp

... 
    int sum (int a, int b, int c=10) { 
     return a + b + c; 
    } 

main.cpp

... 
    cout << sum (1, 2) << endl; 
    ... 

Der Compiler führt eine Fehlermeldung, too few arguments to function....

Es funktioniert gut, wenn ich als cout << sum (1,2,3) << endl; Code codieren Aber wie nur 2 Argument übergeben?

+2

Setzen Sie das Standardargument in die Kopfzeile. – drescherjm

Antwort

2

Standardfunktionsargumente müssen in die Funktionsdeklaration gehen, die der Aufrufstandort sieht.

int sum (int, int, int = 10); 

Sie sind an dem Ausdruck erforderlich, an dem die Funktion aufgerufen wird. Der Implementierung sollte es egal sein, ob sie als Standard übergeben wird oder nicht.

Darüber hinaus können Sie die Funktion in einem kleineren Bereich neu deklarieren und völlig andere Standardargumente angeben. Diese Code-Schnipsel aus dem 17 Standard-Entwurf ++ c genommen und zeigen, was ich meine:

void f(int, int); 
void f(int, int = 7); 
void h() { 
    f(3);       // OK, calls f(3, 7) 
    void f(int = 1, int);   // error: does not use default 
           // from surrounding scope 
} 
void m() { 
    void f(int, int);    // has no defaults 
    f(4);       // error: wrong number of arguments 
    void f(int, int = 5);   // OK 
    f(4);       // OK, calls f(4, 5); 
    void f(int, int = 5);   // error: cannot redefine, even to 
           // same value 
} 
void n() { 
    f(6);       // OK, calls f(6, 7) 
} 

Theoretisch (tut dies in der Praxis nicht tun), können Sie auch unterschiedliche Header haben, die die gleiche Funktion mit einem deklarieren verschiedene Standard-Parameterwert. Und es wird wie erwartet funktionieren, solange sie nicht beide in der gleichen Übersetzungseinheit enthalten sind.

+0

@Remy, ich würde mich freuen, wenn Sie die Bearbeitung in der Zukunft vorschlagen. Ich habe gerade einen Absatz verloren, an dem ich gerade gearbeitet habe. – StoryTeller

1

Sie müssen den Standardwert in dem Prototyp (die Funktionsdefinition in der h-Datei) angeben:

int sum (int, int, int=10); 

keine Notwendigkeit, sie in der Funktion Implementierung zu spezifizieren.