使用移动构造函数时,构造函数中没有默认参数

时间:2018-04-05 16:53:59

标签: c++ constructor

当我向子类添加移动构造函数时,我发现我不能使用构造函数的默认参数。我也尝试在base_class中使用带有零参数的重载构造函数,这些构造函数使用手动传递的参数调用普通构造函数,但我遇到了同样的问题。

Visual Studio的错误消息是:error C2512: 'child_class<base_class>': no appropriate default constructor available

class base_class {
public:
    base_class(int param1=1) {}
};

template <typename BaseType>
class child_class : public BaseType {
public:
    using BaseType::BaseType;
    child_class(child_class&& move_in)
        : BaseType(std::move(move_in)) {}
};

int main(int argc, char** argv) {
    child_class<base_class> instance1; // MSVC says no default constructor so doesn't compile.
    child_class<base_class> instance2(123); // No problem
}

1 个答案:

答案 0 :(得分:3)

这可能是继承的构造函数实现中的MSVC错误。 Clang编译代码时没有抱怨。