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

12

目前我有一个类 A,它继承自类 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)

我该如何修复这个错误?


1
请发布您当前的代码。 - Ramon Zarazua B.
@Ramon Zarazua--为什么?我已经得到了答案... - wrongusername
3
因为 Stackoverflow 是一个集体,旨在帮助更多的人,而不仅仅是提问者。有相同问题的人会搜索这个问题并使用答案解决他们的问题。但为了做到这一点,他们需要知道他们的问题与您的问题相同。通过提供展示您问题的代码,其他人可以更轻松、更快速地确定这个问题(最终也包括答案)是否适用于他们。 - Ted Klein Bergman
2个回答

23
构造函数应该像这样:
A(int i) : B(i) {}

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

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


谢谢你解释这个意思,史蒂夫!我没意识到有一个初始化器。 - wrongusername

9
你需要通过类的初始化列表调用基类构造函数。
例如:
class C : public B
{
public:
    C(int x) : B(x)
    {
    }

};

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接