【问题标题】:Class inherited from class without default constructor从没有默认构造函数的类继承的类
【发布时间】:2011-04-12 11:10:34
【问题描述】:

现在我有一个类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)

我该如何解决这个错误?

【问题讨论】:

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

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


【解决方案1】:

构造函数应该如下所示:

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

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

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

【讨论】:

  • 感谢您解释这意味着什么,史蒂夫!我没有意识到有一个初始化程序
【解决方案2】:

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

例子:

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

};

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

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2015-12-10
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2018-09-07
    • 1970-01-01
    相关资源
    最近更新 更多