C++ 在声明派生类时调用基类的构造函数

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) {} };

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

在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::候选者需要提供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)
    ,您需要显示它吗?