デフォルトの関数引数は、コールサイトが認識する関数宣言に入る必要があります。
int sum (int, int, int = 10);
これらは、関数が呼び出される式で必要です。実装はデフォルトに渡されるかどうかは気にしないでください。
さらに、より小さなスコープで関数を再宣言し、完全に異なるデフォルト引数を与えることができます。このコードスニペットは、C++ 17標準のドラフトから取られたと私は何を意味するかを示していされています、あなたもと同じ関数を宣言異なるヘッダを持つことができ
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)
}
理論的には、(実際にはこれをしません) 異なるデフォルトのパラメータ値。また、両方が同じ翻訳単位に含まれていない限り、期待どおりに動作します。
int sum (int, int, int=10);
関数の実装でそれを指定する必要はありません:
ヘッダーに既定の引数を設定します。 – drescherjm