c++ - 没有对基类的匹配函数调用

标签 c++ inheritance subclass

在这里,我试图创建基类 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;
}

基类对象使用默认构造函数初始化,除非在构造函数实现中使用另一个构造函数初始化初始化列表中的基类。

这就是编译器无法编译该函数的原因。

你需要:

  1. Airplane 添加一个默认构造函数,或者
  2. 在初始化列表中使用Airplane 的可用构造函数。

查看您发布的代码,选项 2 将起作用。

Fighter::Fighter(int engines, int seats, string desc) :
        Airplane(engines, seats), rangeSpeed(desc)
{
}

清理建议

我不明白为什么您需要 Fighter 中的成员 fNumEnginesfNumSeats。基类已有成员来捕获该信息。我建议您删除它们。

关于c++ - 没有对基类的匹配函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441447/

相关文章:

java - Java 中的接口(interface)继承

python - 将对象包装到派生类中

Java:父类(super class)和子类

java - 创建子类只是为了在不同子类之间进行转换

C++ 使用类标记数学表达式

c++ - 为什么函数不在特定函数之后执行

c++ - 如何在 C++ 中获取 std::string 的基本 preg_match_all 替换?

c++ - 在 C++ 中分配 3D 数组最惯用的方法是什么?

c++ - C++中随机数的使用

jquery - 从前置的 div 中删除 .img css