在这里,我试图创建基类 Airplane 的子类。在我的主要代码中,我还没有尝试使用任何一个构造函数,因为我只是想确保我可以使子类 Fighter 正常工作。
它给我的确切错误是
no matching function for call to 'Airplane:Airplane()'
并说它属于 Fighter.cpp 中的这行代码
Fighter::Fighter(int engi, int seat, string description)
战斗机.cpp
#include "Fighter.h"
Fighter::Fighter(int engin, int seat, string description)
{
fNumEngines = engi;
fNumSeats = seat;
rangeAndSpeedDesc = description;
}
斗士.h
#include "Airplane.h"
using namespace std;
#ifndef FIGHTER_H_
#define FIGHTER_H_
class Fighter:public Airplane {
private:
int fNumSeats;
int fNumEngines;
string rangeAndSpeedDesc;
}
飞机.cpp
#include "Airplane.h"
using namespace std;
Airplane::Airplane(int engines, int seats)
{
numSeats = seats;
numEngines = engines;
}
最佳答案
Fighter::Fighter(int engines, int seats, string desc)
{
fNumEngines = engines;
fNumSeats = seats;
rangeSpeed = desc;
}
相当于:
Fighter::Fighter(int engines, int seats, string desc) : Airplane()
{
fNumEngines = engines;
fNumSeats = seats;
rangeSpeed = desc;
}
基类对象使用默认构造函数初始化,除非在构造函数实现中使用另一个构造函数初始化初始化列表中的基类。
这就是编译器无法编译该函数的原因。
你需要:
- 为
Airplane
添加一个默认构造函数,或者 - 在初始化列表中使用
Airplane
的可用构造函数。
查看您发布的代码,选项 2 将起作用。
Fighter::Fighter(int engines, int seats, string desc) :
Airplane(engines, seats), rangeSpeed(desc)
{
}
清理建议
我不明白为什么您需要 Fighter
中的成员 fNumEngines
和 fNumSeats
。基类已有成员来捕获该信息。我建议您删除它们。
关于c++ - 没有对基类的匹配函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441447/