如何解决 "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 中的基础子对象需要空括号。 (在这种情况下,默认构造函数无关紧要,Parent
和 Child
都是聚合并且执行聚合初始化。)
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};
// ^^
我在这里面临一个相对棘手的情况,乍一看似乎很容易。将这三个成员从父 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 中的基础子对象需要空括号。 (在这种情况下,默认构造函数无关紧要,Parent
和 Child
都是聚合并且执行聚合初始化。)
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};
// ^^