我试图解决此错误,但我不知道该怎么做..
#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()&#39;的匹配功能 需要帮助... 我稍后会把主要功能放进去,因为错误就在这里。
答案 0 :(得分:3)
当您创建AirPlane
时,您也隐式地创建了AirShip
部分。您可以像这样编写构造函数:
AirPlane(string a,double b) : AirShip()
{
engine=a;
range=b;
}
但是,AirShip
没有默认构造函数。你基本上有两个选择:
A)提供默认构造函数。默认构造函数是可以不带参数调用的构造函数。例如,您可以为乘客和货物的数量提供默认参数。但是,我不建议这样做。 Imho最好正确地初始化构造函数中的所有成员,并且默认值不是您想要的大部分时间。
B)正确初始化AirShip
的{{1}}部分,例如......
AirPlane
...并为其他成员使用初始化列表。
答案 1 :(得分:0)
由于你的AirPlane
- 类派生自AirShip
,它还需要通过显式调用的AirShip
- 构造函数或通过(甚至隐式)调用来初始化基类。 AirShip
- 默认构造函数。
但是,您的AirShip
类不提供默认构造函数(可以隐式调用),而您的AirPlane(string a,double b) { ... }
- 构造函数不会显式调用任何其他AirShip
- 构造函数。
因此要么在AirShip
定义默认构造函数,要么引入基类的显式初始化,例如:写AirPlane(string a,double b) : AirShip(0,0) {...}
。