声明一个具有默认指针值的函数
Declare a function with default pointer value
我试图在.cpp文件中声明此函数,但出现编译错误:
错误:为"void print_vector(std::vector&,char*)"的参数2提供了默认参数
void print_vector(vector<int>&c, char *title="");
我怎样才能正确申报?
您显示的声明不足以产生此错误,但如果您将函数声明和实现分离,并且意外地在两者中都有默认值,则可能会出现此错误。请确保仅在其中一个中指定默认参数。
即代替
// 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
}
进行
// 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指出的错误,谢谢!)。
函数的声明只说明如何调用该函数。它不需要匹配,在某些情况下可能不匹配。考虑一个案例:
class T
{
static int GetDefault();
};
int T::GetDefault()
{
return 0;
}
这里,在实现中不需要也不需要使用static
关键字。某些编译器可能会发出警告,或者某些静态分析工具可能会发出警报(尽管这不会造成伤害)。此外,请注意,参数名称可能不匹配(或者在声明或实现中可能被省略),因为调用者只需要基本原型。
int Compute(int,int);
int Compute(int a, int b)
{
return a*b;
}
在默认参数的情况下,您为调用方提供默认参数,而不是为函数本身的实现提供默认参数(除非在类中内联实现)。
相关文章:
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 为什么指针对象没有调用默认构造函数
- 默认参数和函数指针作为函数参数C++
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 当指针在 cpp 17 中失去引用时,是否会调用非默认析构函数?
- char指针或char变量的默认值是多少
- 在一行中将默认类型值上的指针作为参数传递
- 如何使用带有非默认构造函数的指针来提升序列化
- 指针参数的默认值
- 不能将指针用作默认模板参数
- 模板默认参数作为指向自身的指针
- 指针的默认值
- 原始指针的默认删除器(unique_ptr)
- 常量指针到成员是否默认指向 int?
- 从指针访问值或获取其默认值(如果为 null)的最干净方法
- C 如何删除指针的默认对象成员
- 唯一指针作为默认参数
- 在Qt中,指针默认不与NULL关联
- 调试断言失败(无效空指针)默认字符串参数
- 从动态分配的解引用指针默认初始化非const引用函数参数是否会造成内存泄漏?