基 class 的构造函数在声明派生 class 时被调用

constructor of base class is called while declaring a derived class

我有两个文件和一个基础 class。我想让派生 class 中的某些函数使用基 class 中的数据成员。我面临的问题与下面给出的问题非常相似:

在文件中 BaseFile.h

class Base{
private:
int a, b;
protected:
//some data members and functions that I want to share with derived class
public:
Base(int apple, int ball):apple(a), ball(b) {}
};

在文件中 DerivedFile.h

#include "BaseFile.h"
class Derived : public Base{   //error in this line
//stuffs
};

每当我声明派生 class 时,我都会收到一条错误消息 'no matching function for call to Base::Base note:: candidate expects 2 arguments 0 provided'。这个问题的原因可能是什么?

您在基础 class 中有一个构造函数,它需要两个参数但没有默认构造函数。我的猜测是你的派生 class 没有声明构造函数,所以编译器试图为你创建一个默认值。然后它就无法调用基本构造函数,因为它是唯一需要 2 个参数的构造函数。

首先,您在 Base class 中的初始化列表是错误的。应该是 a(apple), b(ball).

其次,您确实需要在 Derived class 中初始化 Base class,即调用其构造函数。 像

Derived::Derived() :
  Base(0,0) {
}

您收到此错误是因为 Base class 没有默认构造函数(它采用 0 个参数)并且来自派生的 class 构造函数基础 class 默认构造函数正在被调用。这可以通过两种方式解决:

  1. 将默认构造函数添加到基础 class
  2. 确保 Base class 构造函数总是被调用为 Base(int, int).

Base class 构造函数代码中也有错字

Base(int apple, int ball):apple(a), ball(b) {}

应该是

Base(int apple, int ball):a(apple), b(ball) {}