C++ 使用继承时没有匹配的构造函数

Posted

技术标签:

【中文标题】C++ 使用继承时没有匹配的构造函数【英文标题】:C++ No matching constructor when using inheritance 【发布时间】: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 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于C++ 使用继承时没有匹配的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构造函数?

继承构造函数在 C++ 中有多大用处?

C++调用父类的构造函数规则

为啥不继承 C++ 构造函数?

C++ 继承:子类实例同时使用子构造函数和父构造函数

为啥 C++ 构造函数在继承中需要默认参数?