Cli*_*est 9 c++ constructor class default-value
我正在尝试使用默认值创建构造函数.复杂性来自于为类使用单独的头文件和代码文件.我有一个包含以下内容的头文件:
class foo {
bool dbg;
public:
foo(bool debug = false);
}
Run Code Online (Sandbox Code Playgroud)
一个代码文件包含:
foo::foo(bool debug = false) {
dbg = debug;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试用g ++(即g++ -c foo.cc)编译时,它会给出一个错误:
foo.cc:373:65: error: default argument given for parameter 1 of ‘foo::foo(bool)’
foo.h:66:4: error: after previous specification in ‘foo::foo(bool)’
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
不要在定义中提供默认值:
foo::foo(bool debug) {
dbg = debug;
}
Run Code Online (Sandbox Code Playgroud)
现在是正确的.默认值应仅在声明中提供,您已在头文件中完成.
顺便说一句,更喜欢使用成员初始化列表而不是分配:
当然,如果它的声明兼定义,那么你必须在声明兼定义中提供默认值(如果你想要的话):
class foo {
bool dbg;
public:
foo(bool debug = false) : dbg(debug) {}
//^^^^^^^^^^^ using member initialization list
}
Run Code Online (Sandbox Code Playgroud)