基 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 默认构造函数正在被调用。这可以通过两种方式解决:
- 将默认构造函数添加到基础 class
- 确保
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) {}
我有两个文件和一个基础 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 默认构造函数正在被调用。这可以通过两种方式解决:
- 将默认构造函数添加到基础 class
- 确保
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) {}