我试图在.cpp文件中声明此函数,但是出现编译错误:
错误:'void print_vector(std :: vector&,char *)'参数2的默认参数
void print_vector(vector<int>&c, char *title="");
如何正确声明?
答案 0 :(得分:1)
您显示的声明不足以产生此错误,但如果您将函数声明和实现分开并且意外地在两者中都有默认值,则可能会出现此错误。请务必仅在其中一个中指定默认参数。
即。而不是
// declaration, usually in .h
void print_vector(vector<int>&c, const char *title="");
// implementation, usually in .cpp
void print_vector(vector<int>&c, const char *title="") {
// code
}
DO
// declaration, usually in .h
void print_vector(vector<int>&c, const char *title="");
// implementation, usually in .cpp
void print_vector(vector<int>&c, const char *title) {
// code
}
或反过来,即在实现中使用默认值(虽然上面显示的方式通常是首选,因为它使得头文件的读者的行为和用法清晰)。还要注意const char *以避免警告(甚至是AndreyT指出的错误,谢谢!)。
答案 1 :(得分:0)
函数声明仅说明如何调用此函数 。它不需要匹配,在某些情况下可能不匹配。考虑一个案例:
class T
{
static int GetDefault();
};
int T::GetDefault()
{
return 0;
}
此处,在实现中使用static
关键字不需要不。某些编译器可能会呈现警告,或者某些静态分析工具会呈现警告(尽管它不会造成伤害)。另请注意,参数名称可能不匹配(或者可能在声明或实现中都省略),因为只有基本原型需要才能为调用者。
int Compute(int,int);
int Compute(int a, int b)
{
return a*b;
}
如果是默认参数,则为调用者提供默认参数 ,而不是为函数本身的实现提供默认参数(除非在类中实现内联)。