A具有原型的功能:
void arryprnt(int[], string, int, string, string);
定义:
void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".") {
// stuff
}
我这样称呼它:
arryprnt(jimmy, "PSEUDOJIMMY: ", 15);
...当我调用arryprnt时,我得到一个编译器错误,说我根据原型所说的使用了太少的参数。 “好的,”我在想,“编译器不知道某些arryprnt的参数有默认值。我只是将参数从定义复制到原型中。”然而,我做了一个编译器错误告诉我,我用太多参数调用arryprnt!我可以只显式指定所有参数,但有没有办法在不指定所有参数的情况下调用它?
答案 0 :(得分:22)
您应该将默认参数放在原型中,而不是像这样的定义:
void arryprnt(int[] a, string intro, int len, string sep=", ", string end=".");
并在没有它们的情况下进行定义:
void arryprnt(int[] a, string intro, int len, string sep, string end) {
// ...
}
顺便说一句:另一方面。通过 const reference 传递大于int的对象被认为是一种好习惯。虽然这不适合所有情况,但它适用于大多数情况并避免不必要地复制内容。例如:
void func(const std::string &s) {
// do some read-only operation with s.
}
func("hello world");
答案 1 :(得分:-1)
不确定这是否仍然相关,但是下面的代码工作正常。
原型:
void arryprnt(int[], string, int, string = ", ", string=". ");
定义:
void arryprnt(int a[], string intro, int len, string sep, string endd)
//stuff
当函数有默认参数时,最好是在原型中声明它们,而不是在函数定义中声明它们。下面的代码没有用,
原型:
void arryprnt(int[], string, int, string = ", ", string=". ");
定义:
void arryprnt(int a[], string intro, int len, string sep = ", ", string endd = ". ")
//stuff