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++ 使用继承时没有匹配的构造函数的主要内容,如果未能解决你的问题,请参考以下文章