如何解决 "error C2078: too many initializers" 将相同的成员从父 class 移动到其子?

How to solve "error C2078: too many initializers" when moving the same members from the parent class to its child?

我在这里面临一个相对棘手的情况,乍一看似乎很容易。将这三个成员从父 class Parent 移动到其子 class Child 后,我似乎无法再利用默认构造函数。

为什么?有没有办法不必专门实现 Child(...) 构造函数。一开始似乎违反直觉......实际上我认为第一个例子是它失败的地方(认为 Child class' 构造函数会掩盖其父构造函数)。

struct Parent
{
    std::string mText;
    int mInt;
    bool mBool;
};

struct Child : public Parent
{
};

Child test{ "", 0, false}; // Compiles

但在后一种情况下,如果成员在子 class 中定义,则不会创建默认构造函数。

struct Parent
{
};

struct Child : public Parent
{
    std::string mText;
    int mInt;
    bool mBool;
};

Child test{ "", 0, false}; // error C2078: too many initializers

aggregate initialization 中的基础子对象需要空括号。 (在这种情况下,默认构造函数无关紧要,ParentChild 都是聚合并且执行聚合初始化。)

However, if the object has a sub-aggregate without any members (an empty struct, or a struct holding only static members), brace elision is not allowed, and an empty nested list {} must be used.

Child test{ {}, "", 0, false};
//          ^^