将相同的成员从父类移动到其子类时如何解决“错误 C2078:太多初始化程序”?

tbop

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

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

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

struct Child : public Parent
{
};

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

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

struct Parent
{
};

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

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

聚合初始化中的基本子对象需要空括号(在这种情况下,默认构造函数无关紧要,两者都是聚合ParentChild聚合初始化。)

但是,如果对象有一个没有任何成员的子聚合(一个空结构,或一个只包含静态成员的结构),则不允许大括号省略,并且{}必须使用空的嵌套列表。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在ARM上初始化uint32x4_t时出错C2078?

C ++错误:“ int [100]”的初始化程序太多|

C ++错误:多维数组的初始化程序太多

C ++:为“ char [4]”数组错误获取太多的初始化程序

C“错误:无效的初始化程序”

太多的初始化值错误

在Java中,为什么不能在父类中声明最终成员(不进行初始化),并在子类中设置其值?我该如何解决?

具有非静态成员初始化程序的类的C ++ 11聚合初始化

在golang中初始化C结构时,结构初始化程序中的值太少

在C中调用malloc时无效的初始化程序?

在 C 中创建 BITMAP 时无效的初始化程序

如何在C中找到初始化程序的大小?

类内成员初始化程序和初始化列表之间的冲突解决

当我尝试初始化一个类以调用其方法之一时,出现错误,如何解决?

非法的char初始化程序-如何解决?

使用聚合初始化和成员初始化程序初始化结构

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

C ++类成员初始化序列

UIViewController的子类所需的初始化程序

Python子类初始化程序参数

当序列化具有与该对象相同类型的类成员的对象时,如何解决循环引用

成员初始化程序的顺序

如何使用C ++ 20指定的初始化程序在结构中初始化联合

如何确保子类具有与基类相同的初始化程序?

“无效的初始化程序”错误

Swift初始化程序中的错误

我如何解决此错误无法在初始化程序中访问实例“小部件”

如何解决变量初始化C ++的警告

C ++初始化程序列表功能:调用函数而不初始化成员吗?