调用飞艇飞艇时出错没有匹配函数

getting error no matching function for call to AirShip AirShip

本文关键字:函数 出错 调用      更新时间:2023-10-16

我正在尝试修复此错误,但我不知道该怎么办。

#include<iostream>
#include<string>
using namespace std;
class AirShip{
private:
    int passenger;
    double cargo;
public:
    AirShip(int x,double y)
    {
        passenger=x;
        cargo=y;
    }
    void show ()
    {
        cout<<"passenger="<<passenger<<endl;
        cout<<"cargo="<<passenger<<endl;
    }
};
class AirPlane: protected AirShip{
private:
    string engine;
    double range;
public:
    AirPlane(string a,double b)
    {
        engine=a;
        range=b;
    }
void show()
{
    cout<<"engine="<<engine<<endl;
    cout<<"range="<<range<<endl;
}
};

错误是:错误:调用"AirShip::AirShip(("没有匹配函数需要这方面的帮助...我稍后会放主函数,因为错误在这里。

创建AirPlane时,也会隐式创建其中的AirShip部分。你也可以像这样编写构造函数:

AirPlane(string a,double b) : AirShip()
{
    engine=a;
    range=b;
}

但是,AirShip没有默认构造函数。你基本上有两个选择:

A( 提供一个默认构造函数。默认构造函数是可以在没有参数的情况下调用的构造函数。例如,您可以为乘客和货物数量提供默认参数。但是,我不建议这样做。恕我直言,最好正确初始化构造函数中的所有成员,默认值不是您想要的大多数时间。

B( 正确初始化AirPlaneAirShip部分,例如...

AirPlane(string a,double b, int x, double y) : 
   AirShip(x,y),engine(a),range(b)
{}

。并同时对其他成员使用初始值设定项列表。

由于您的AirPlane类派生自AirShip,因此它也需要通过显式调用的AirShip构造函数或通过(甚至隐式(调用AirShip-default构造函数来初始化基类。

但是,您的 AirShip 类不提供默认构造函数(可以隐式调用(,并且您的 AirPlane(string a,double b) { ... } -constructor 不会显式调用任何其他 AirShip -constructor。

所以要么在AirShip定义一个默认构造函数,要么引入基类的显式初始化,例如通过编写AirPlane(string a,double b) : AirShip(0,0) {...}