【问题标题】:C++ No matching constructor when using inheritanceC++ 使用继承时没有匹配的构造函数
【发布时间】:2020-12-01 16:25:54
【问题描述】:

我有这样的代码:

class A{
public:
    int b;
};

int main()
{
    A a{.b = 5};
}

程序编译。

但是,当我添加另一个类并使 A 继承该类(如下所示)时,它会引发错误“没有匹配的函数用于调用 'A::A()'”(或“没有匹配的构造函数用于初始化A")。

class C{

};

class A: public C{
public:
    int b;
};

int main()
{
    A a{.b = 5};
}

为什么?

【问题讨论】:

  • class A: C{ 更改为 class A: public C{ - 聚合初始化要求所有继承都是公开的
  • 程序仍然无法编译(同样的错误)。我在最初的帖子中编辑了代码以添加公共(新程序仍然无法编译)。
  • 哪个编译器?在一些can't reproduce。从 C++20 开始可以使用指定的初始化。所以请提供编译器平台和编译器选项。
  • -std=c++17 编译但不是-std=c++11

标签: c++ inheritance constructor curly-braces


【解决方案1】:

您正在使用自 C++20 起可用的功能“Designated initializers”。

我也无法重现此问题:https://godbolt.org/z/fz3PeP

  • 注意,使用 C++17 gcc 和 clang 只会提交警告,msvc 会提交错误
  • 使用 C++20,这三个都可以(msvc 需要 c++latest 选项)。
  • 使用 C++14 时,它会到处报错

所以看起来问题只是编译器版本或配置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2017-10-04
    • 2019-01-21
    • 1970-01-01
    相关资源
    最近更新 更多