c++ 继承 – 构造器类 – 非默认构造类型的初始化失败

我的项目中遇到以下错误:

error: use of deleted function ‘C::C(int)’ note: ‘C::C(int)’ is
implicitly deleted because the default definition would be ill-formed:
error: use of deleted function ‘M::M()’

这是我使用的代码:

struct M {
    M(int){}
    M() = delete;  // Allowing this would work.
};

struct B {
    B(int) {}
    B() = delete;
};

struct C : public B {
    using B::B;
    M n = {5};

    // C(int i) : B(i) {}  // Adding this would work
};

C c{1};

有人知道为什么会这样吗?

显然,语言愿意在继承的构造函数的末尾附加更多的初始化(因为它愿意调用默认构造函数).显然,它愿意将非默认构造函数(类初始化)中的一个调用添加到明确定义的构造函数的末尾.但由于某种原因我不明白,不愿意同时进行.

根据this question,完美的转发不是很完美,不应该在这里使用.

注意:在实际情况下,B的构造函数复杂得多,可能会发生变化,因此手动转发的东西并不是一个可行的选择.

代码日志版权声明:
翻译自:http://stackoverflow.com/questions/25574406/inheriting-constructors-in-class-initialization-of-non-default-constructabe-ty

转载注明原文:c++ 继承 – 构造器类 – 非默认构造类型的初始化失败