我在每个文件中都有两个文件和一个基类。我想让派生类中的某些函数使用基类中的数据成员。我面临的问题与下面给出的问题非常相似:
在文件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'。可能是造成这个问题的原因是什么?
答案 0 :(得分:3)
首先,Base类中的初始化列表是错误的。应该是a(apple), b(ball)
。
其次,您需要在Derived类中初始化Base类,即调用其构造函数。 像
这样的东西Derived::Derived() :
Base(0,0) {
}
答案 1 :(得分:2)
基类中有一个构造函数,它需要两个参数但没有默认构造函数。我的猜测是你的派生类没有声明构造函数,所以编译器试图为你创建一个默认值。然后,它无法将基础构造函数作为唯一需要2个参数的方法。
答案 2 :(得分:0)
您收到此错误是因为Base
类没有默认构造函数(接受0个参数),并且从派生类构造函数基类默认构造函数被调用。这可以通过两种方式解决:
Base
类构造函数称为Base(int, int)
。Base类构造函数代码中也有一个拼写错误
Base(int apple, int ball):apple(a), ball(b) {}
应该是
Base(int apple, int ball):a(apple), b(ball) {}