关于含有默认参数重定义的错误与解决
1.错误程序
#include <iostream>
using namespace std;
static int count = 0;
void print_str(char *str, int n, int &ref = count);
int main()
{
char *str = (char *)"Hello World!";
print_str(str, 0);
cout << endl;
print_str(str, 1);
cout << endl;
print_str(str, 1);
return 0;
}
void print_str(char *str, int n, int &ref = count)
{
++ref;
if (n)
{
for (int i = 0; i < ref; i++)
{
cout << str << endl;
}
}
else
{
cout << str << endl;
}
}
2.编译结果如下:
1.printstr.cpp:14:50: error: default argument given for parameter 3 of 'void print_str(char*, int, int&)'
[-fpermissive]
void print_str(char *str, int n, int &ref = count)
^
1.printstr.cpp:4:6: note: previous specification in 'void print_str(char*, int, int&)' here
void print_str(char *str, int n, int &ref = count);
3.错误原因:
默认参数只能指定一次。在函数的声明和定义中只能在一处指定参数的默认值。如果两处都指定为非法;
编译器把这种情况作为非法处理的原因是:在声明和定义中如果指定了不同的默认值,编译器将无法判断采用哪个值作为参数的默认值。