C++函数默认参数使用报错:调用仅传非默认参数失败
问题解决:C++函数默认参数调用报错
你的问题出在默认参数的声明位置错误——C++要求函数的默认参数必须在函数的**声明(头文件)**中指定,而不是仅在定义(cpp文件)里设置。
错误原因
编译snafu()函数时,编译器只会参考头文件foo.h里的函数声明:
void bar(int, int, int);
这个声明里没有任何默认参数,所以编译器认为bar必须接收3个int参数,调用只传1个参数自然会报错C22660。
修正后的代码
头文件foo.h(修改声明,添加默认参数)
//foo.h #pragma once struct foo { void bar(int, int = 1, int = 2); // 把默认参数放在声明里 void snafu(); }; // 补上结构体末尾缺失的分号
实现文件foo.cpp(定义里可省略默认参数,编译器会忽略定义中的默认参数)
//foo.cpp #include "foo.h" void foo::bar(int x, int y, int z) { // ... do stuff } void foo::snafu() { bar(5); // 现在可正常调用,自动使用默认参数y=1,z=2 }
额外注意
- 默认参数只能在函数的第一次声明中指定,后续声明或定义里重复指定会被编译器忽略,甚至可能触发警告。
- 原代码中结构体定义末尾缺失分号
;,属于语法错误,必须补上才能正常编译。
内容的提问来源于stack exchange,提问作者Jesse Knott
相关产品推荐
相关产品推荐

