现在我有一个继承自A
类的类B
,而B
没有默认构造函数。我正在尝试为A
创建一个构造函数,它与B
的构造函数具有完全相同的参数,但我得到:
error: no matching function for call to ‘B::B()’
note: candidates are: B::B(int)
我该如何修复此错误?
答案 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,它将尝试使用没有参数的默认构造函数。