声明派生类时会调用基类的构造函数

时间:2015-03-14 10:36:21

标签: c++ inheritance

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

在文件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
};

每当我声明派生类时,我都会收到一条错误,说明没有匹配函数来调用Base :: Base note :: candidate期望提供2个参数0'。可能是造成这个问题的原因是什么?

3 个答案:

答案 0 :(得分:3)

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

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

这样的东西
Derived::Derived() :
  Base(0,0) {
}

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您收到此错误是因为Base类没有默认构造函数(接受0个参数),并且从派生类构造函数基类默认构造函数被调用。这可以通过两种方式解决:

  1. 将默认构造函数添加到基类
  2. 确保始终将Base类构造函数称为Base(int, int)
  3. Base类构造函数代码中也有一个拼写错误

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

    应该是

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