c++ - 非默认构造函数类型的继承构造函数 + 类内初始化失败

标签 c++ c++11 in-class-initialization inheriting-constructors

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

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()’

This is the code I am using:

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 的构造函数要复杂得多,并且可能会发生变化,因此手动转发东西并不是一个真正可行的选择。

最佳答案

关于c++ - 非默认构造函数类型的继承构造函数 + 类内初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25574406/

相关文章:

c++ - 如何使用特定于应用程序的 key 加密目录?

c++ - vector.push_back 右值和复制省略

c++ - 你可以调用模板参数成员的成员吗?

c++ - 类内将不完整类型的 unique_ptr 初始化为 nullptr 时,gcc 编译错误

c++ - nvcc fatal : Unsupported gpu architecture 'compute_20' while cuda9. 0 已安装

c++ - C 和 C++ 关于++ 运算符的区别

c++ - 我需要 std::atomic<bool> 还是 POD bool 足够好?

c++ - 期望 const std::string & 的函数的链接器错误

c++ - 具有显式定义的默认构造函数的 unique_ptr 到 nullptr 错误的类内成员初始值设定项