使用默认指针值声明一个函数

时间:2014-11-08 07:19:58

标签: c++

我试图在.cpp文件中声明此函数,但是出现编译错误:

错误:'void print_vector(std :: vector&,char *)'参数2的默认参数

void print_vector(vector<int>&c, char *title="");

如何正确声明?

2 个答案:

答案 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;
}

如果是默认参数,则为调用者提供默认参数 ,而不是为函数本身的实现提供默认参数(除非在类中实现内联)。