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

C++ No matching constructor when using inheritance

我有这样的代码:

class A{
public:
    int b;
};

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

然后程序编译。

但是,当我添加另一个 class 并让 A 继承 class(如下所示)时,它会抛出错误“没有匹配的函数来调用 'A::A() '”(或“A 的初始化没有匹配的构造函数”)。

class C{

};

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

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

为什么?

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

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

  • 注意 C++17 gcc 和 clang 只是发出警告,msvc 发出错误
  • 对于 C++20,这三个都很好(msvc 需要 c++latest 选项)。
  • 使用 C++14 时到处都会报错

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