2017-04-13 65 views
-1

我试图解决这个错误,但我没有做什么..得到错误的呼叫没有匹配功能,飞艇飞艇

#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()' 需要帮助... 我稍后会把主要功能,因为错误在这里。

+0

相关:http://stackoverflow.com/questions/4981241/no-default-constructor-exists-for-class –

+0

您是否曾尝试为'AirShip'添加一个空的构造函数,因为根据错误似乎是什么失踪。 – moondaisy

+0

是的,我需要调用一个无参数的构造函数。它工作的方式太。谢谢你 –

回答

3

当您创建AirPlane时,您还隐式创建了AirShip的一部分。你可能也写的构造是这样的:

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

然而,AirShip没有默认构造函数。你基本上有两种选择:1)提供一个默认的构造函数。默认构造函数是可以不带参数调用的构造函数。例如,您可以提供乘客和货物数量的默认参数。但是,我不会推荐。 Imho最好是正确地初始化构造函数中的所有成员,并且默认值不是大多数时候想要的。

B)正确初始化AirPlane例如在AirShip部分...

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

...并使用初始化列表也为其他成员。

+0

我看到它初始化,但我应该如何调用主函数...我试图了解C++ ..我写了这样的主要功能---- int main(void){ AirPlane ap1(200,40.550,“jets”,500.560); AirPlane ap; ap.show(); return 0; } 我再次得到了同样的错误....所以,我一定要调用构造飞艇@主要funtion太 –

+0

@johnerjubair你仍然有'飞机AP;'在'main',即此时你试图调用'Airplane'的默认构造函数,这次你的选择是A)为'Airplane'提供默认的构造函数(不会提示)B)只要按照'ap1(200,40.550, “喷气机”,500.560)',例如'ap(100,1.0,“waterbaloon”,0.0)' – user463035818

+0

谢谢。它工作得很好。这教给我的东西:) –

0

由于您AirPlane -class从AirShip派生,它需要初始化基类为好,无论是通过显式调用AirShip -constructor或通过(甚至含蓄地)称为AirShip -default构造。

但是,你AirShip类不提供一个默认的构造函数(这可以隐式调用),和您的AirPlane(string a,double b) { ... } -constructor没有显式调用任何其它AirShip -constructor。

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

+0

谢谢你的工作! :) –