11

现在我有一个A继承自 class 的类B,并且B没有默认构造函数。我正在尝试创建一个A具有与构造函数完全相同的参数B的构造函数

struct B {
  int n;
  B(int i) : n(i) {}
};

struct A : B {
  A(int i) {
    // ...
  }
}; 

但我得到:

error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)

我将如何解决此错误?

4

2 回答 2

23

构造函数应如下所示:

A(int i) : B(i) {}

冒号后面的位表示“使用其构造函数初始化该对象的 B 基类子对象,int值为 i”。

我猜您没有为 B 提供初始化程序,因此默认情况下编译器会尝试使用不存在的无参数构造函数对其进行初始化。

于 2010-09-15T01:59:39.027 回答
9

您需要通过类的初始化列表调用基本构造函数。

例子:

class C : public B
{
public:
    C(int x) : B(x)
    {
    }

};

当您不显式初始化 B 时,它将尝试使用没有参数的默认构造函数。

于 2010-09-15T01:59:01.557 回答