例如,有3个文件,sum.h
,sum.cpp
和main.cpp
。
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;
...
编译器抛出错误too few arguments to function...
。
如果我编码为cout << sum (1,2,3) << endl;
,它可以正常工作
但是如何只传递2个参数?
答案 0 :(得分:2)
默认函数参数必须包含在调用站点看到的函数声明中。
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)
}
理论上(在实践中不要这样做),你甚至可以使用不同的标题声明具有不同默认参数值的相同函数。它将按预期工作,只要它们不包含在同一个翻译单元中。
答案 1 :(得分:1)
您必须在原型中指定默认值(.h文件中的函数定义):
int sum (int, int, int=10);
无需在函数实现中指定它。