从没有默认构造函数的类继承的类

时间:2010-09-15 01:57:03

标签: c++ class inheritance constructor default-constructor

现在我有一个继承自A类的类B,而B没有默认构造函数。我正在尝试为A创建一个构造函数,它与B的构造函数具有完全相同的参数,但我得到:

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

我该如何修复此错误?

2 个答案:

答案 0 :(得分:19)

构造函数应如下所示:

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

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

我猜你没有为B提供初始化器,因此默认情况下编译器会尝试使用不存在的no-args构造函数初始化它。

答案 1 :(得分:6)

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

示例:

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

};

如果不明确初始化B,它将尝试使用没有参数的默认构造函数。