如何声明带预设参数的函数?解决函数声明与定义中预设参数引发的编译错误
解决C++默认参数的编译错误问题
嘿,我一眼就瞅出你代码里的问题啦——你在函数声明和定义里重复写了默认参数,这可是C++里的小禁忌哦!
问题根源
C++的规则很明确:默认参数只能在函数声明或者定义中指定一次,不能同时在两者里都写默认值。当编译器在声明里已经获取了默认参数的信息后,在定义里再次看到相同的默认参数,就会认为是重复定义,直接抛出编译错误。
修正后的代码(推荐写法)
按照你提到的“把函数声明放在main之前,定义放在后面”的良好实践,我们只需要在声明里保留默认参数,定义里只写参数的类型和名称即可:
#include <iostream> using namespace std; // 声明中指定默认参数 void function(int i=1, char a='A', float val=45.7); int main() { function(); return 0; } // 定义中不再重复默认参数 void function(int i, char a, float val) { cout << "i: " << i << endl; cout << "a: " << a << endl; cout << "val: " << val << endl; }
另一种可行写法(无需单独声明)
如果你的函数比较简单,也可以直接把函数定义放在main()之前,这时直接在定义里写默认参数就行,不需要额外声明:
#include <iostream> using namespace std; // 定义中指定默认参数,无需单独声明 void function(int i=1, char a='A', float val=45.7) { cout << "i: " << i << endl; cout << "a: " << a << endl; cout << "val: " << val << endl; } int main() { function(); return 0; }
额外小贴士
在多文件项目中,最佳实践是把带默认参数的函数声明放在头文件里,定义放在源文件中。这样所有包含该头文件的代码都能看到默认参数的设置,同时避免重复定义的问题。
内容的提问来源于stack exchange,提问作者Th3_night_k33p3r
相关产品推荐
相关产品推荐

