繁体   English   中英

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

[英]Class inherited from class without default constructor

现在我有一个继承自B类的A类,而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)

我将如何修复此错误?

构造函数应如下所示:

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

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

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

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

例子:

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

};

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM