当前位置: 首页 > 知识库问答 >
问题:

初始值设定项列表中没有合适的默认构造函数可用错误

吴西岭
2023-03-14

由于某些原因,即使使用成员初始值设定项,我也会遇到无默认构造函数错误。我做错了什么?

一个最小的例子,

a、 cpp

#include "a.h"


a::a(int x, int y, int z):x(x),y(y),z(z)
{
}

a、 h

class a
{
public:
    a(int x, int y, int z);

private:
    int x, y, z;
};

b.cpp

#include "b.h"


b::b()
    :ao(1,2,3)
{
}

b、 h

#include "a.h"

class b: public a
{
public:
    b();

private:
    a ao;
};

共有1个答案

司徒俊雄
2023-03-14

您的b中有两个a对象:一个名为ao并且是成员变量,另一个是继承自b的对象。您已经在初始化程序列表中显式初始化了ao,但您没有初始化b的父对象。您可以通过在ao(1,2,3)之前的初始化程序列表中插入a(4,5,6),来做到这一点。

 类似资料:
  • 我相信现代C初始值设定项列表对于初始化对象非常有用,甚至不需要定义自己的构造函数: 但是,当我的类从另一个类继承时,这不起作用: 我尝试添加

  • 所以我正在学习构造函数初始值设定项列表,我写了以下代码: 为此我使用了g编译器。它调用的是构造函数而不是复制构造函数。它应该调用复制构造函数,因为我正在创建一个对象来创建另一个对象?这里的问题是什么,标准对此怎么说?

  • 我有以下代码: 我希望输出是:“base constructor,test:50”,但事实并非如此,因为构造函数是在初始化之前调用的,没有错误或警告,它只是编译。 有什么方法可以让构造函数在之后被调用吗?或者这是总体上的糟糕设计? 我正在尝试将所有的init方法和它们的调用放入构造函数insted中,这个行为阻止了我这样做。

  • 问题内容: 我正在使用Jackson来将json数组反序列化为某些对象。这是我的课: 错误: 我一直在使用GSON,但由于性能问题需要放弃它。当我切换到Jackson时,我只是向所有类添加了默认构造函数,这可能是不必要的,因为没有定义其他构造函数… 编辑: 哦,JSON看起来像这样: 问题答案: 我没有与Jackson一起工作,但我想问题是Business类是成员类而不是静态的。 杰克逊需要做的是

  • 问题内容: 我有一个对象 我用两种方式初始化它 这是输出 似乎builder没有获得默认值。我在属性中添加了注释,对象现在看起来像这样 这是控制台输出 我怎样才能使他们俩都成为? 问题答案: 我的猜测是,这是不可能的(没有删除代码)。但是,为什么不仅仅实现所需的构造函数呢?Lombok旨在使您的生活更轻松,如果Lombok无法解决某些问题,请按照老式的方式进行操作。 控制台输出:

  • 问题内容: 只有最后一部分(我的意思是我仅对此有问题) 当我编译它时,我没有合适的构造函数错误。为什么是这样??顺便说一下,Spirtokouto类的目的是要增加一个计数值(权重)。我可以将一个班级扩展到> 1个班级吗? 问题答案: Box类有两个构造函数:,但它们都不带四个参数,而您要用四个参数来调用它,因此请更改此参数: 对此: 调用必须首先在构造函数中进行。 我可以将一个班级扩展到 > 1个