C++ 在声明派生类时调用基类的构造函数
我有两个文件,每个文件中有一个基类。我想让派生类中的一些函数使用基类中的数据成员。我面临的问题与下面给出的问题非常相似: 在BaseFile.h文件中C++ 在声明派生类时调用基类的构造函数,c++,inheritance,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) {} };
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::候选者需要提供2个参数0的匹配函数”。这个问题的原因可能是什么?基类中有一个构造函数需要两个参数,但没有默认构造函数。我猜您的派生类没有声明构造函数,因此编译器试图为您创建默认值。然后,它无法调用基构造函数,因为它只需要2个参数 基类中有一个构造函数,它需要两个参数,但没有默认构造函数。我猜您的派生类没有声明构造函数,因此编译器试图为您创建默认值。然后,它无法调用基构造函数,因为它只需要2个参数 首先,基类中的初始值设定项列表是错误的。应该是
a(苹果),b(球)
其次,您确实需要在派生类中初始化基类,即调用其构造函数。
差不多
Derived::Derived() :
Base(0,0) {
}
首先,基类中的初始值设定项列表是错误的。应该是
a(苹果),b(球)
其次,您确实需要在派生类中初始化基类,即调用其构造函数。
差不多
Derived::Derived() :
Base(0,0) {
}
出现此错误是因为
Base
类没有默认构造函数(接受0个参数),并且从派生类构造函数调用了基类默认构造函数。这可以通过两种方式解决:
Base
类构造函数始终被称为Base(int,int)
Base(int apple, int ball):apple(a), ball(b) {}
应该是
Base(int apple, int ball):a(apple), b(ball) {}
出现此错误是因为
Base
类没有默认构造函数(接受0个参数),并且从派生类构造函数调用了基类默认构造函数。这可以通过两种方式解决:
Base
类构造函数始终被称为Base(int,int)
Base(int apple, int ball):apple(a), ball(b) {}
应该是
Base(int apple, int ball):a(apple), b(ball) {}
派生函数如何知道如何调用基构造函数?对不起,我不能完全理解您的要求。我在第三个文件中分别调用了它们的两个构造函数。如果是
a(apple)
,则需要显示“第三个文件”?派生函数如何知道如何调用基构造函数?对不起,我无法完全理解您的要求。我在第三个文件中分别调用了它们的构造函数。如果“第三个文件”是a(apple)
,您需要显示它吗?