C++构造函数默认值头文件

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)

我究竟做错了什么?

小智 13

默认值只能放在头文件中.在我的经验中,使用构造函数(或其他函数)中的默认值很少是一个好主意 - 它通常会在某个地方出现问题.不是说我自己的代码中没有一些!


Naw*_*waz 8

不要在定义中提供默认值:

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)