2016-02-13 104 views
1

我對C++相對較新,我正在創建假設的「Flight Management」應用程序作爲學習體驗並測試各種新技能。簡而言之,我有一個FlightPlan類,其中包含一個私有成員指針,指向Aircraft類型的對象(當然,現在)。從Aircraft衍生類成員是派生對象,其類型尚未知曉

對象是預先存在的在FlightPlan創建時,我希望能夠分配一個Aircraft派生對象指針FlightPlan(所述的A/C,將執行該計劃的飛行)在建造FlightPlan之後,而不僅僅是在施工期間。 (使用方法如

flight-plan-obj.AssignAircaft(cargo-aircraft-obj-pointer); 

我的問題是Aircraft是一個抽象類,CargoAircraftPassengerAircraft從,因此它不知道什麼「類型」的過程中它的aircaft將被分配到飛行計劃派生。建設我的代碼如下(很多人都忽略了爲簡潔起見)

class FlightPlan { 
    private: 
    string departure; 
    string destination; 

    Aircraft* aircraft; // The a/c that will later be assigned to the flight 
         // Obviously this is currently wrong 

    public: 
    FlightPlan(string dep, string dest); 
    void AssignAircraft(Aircraft* ac); 

    // Other methods 
} 

Aircraft抽象類:

class Aircraft { 
    protected: 
    Aircaft(string tailId, string acType); // ctor for the sub-classes 

    string tailId; 
    string acType; 

    public: 
    virtual string Overview() const =0; // pure virtual method 
} 

而且從Aircraft派生的對象的例子:

class CargoAircraft : public Aircraft { 
    private: 
    int cargoCapacity; 

    public: 
    CargoAircraft(string tailId, string acType, int cargoCapcity); 
    string Overview() const override; 

} 
    // ctor defined in the .cpp file as: 
    CargoAircraft::CargoAircraft(string tailId, string acType, int cargoCapacity) 
    : Aircraft(tailId,acType), cargoCapacity(cargoCapacity) {}; 

正是我試圖做可能嗎?我的理解是,指針會多態性允許我做:

Aircraft* aircraft; or Aircaft* aircraft = nullptr; 
FlightPlan

和後來接受Aircraft派生的類的對象指針? 在編譯時我收到:錯誤:'飛機'沒有命名一個類型

我的方法在這裏有什麼根本錯誤嗎?我需要放棄Aircraft是抽象的,只是把它看作更多的基類,並給它一個公共的默認構造函數,並使它的方法只是虛擬的,而不是純虛擬的?

任何和所有的建議都會得到大家的好評,我會非常感激地接受任何關於我使用C++的提示或提示。謝謝。

+0

查看轉發聲明。 –

回答

2

你可以做兩件事情,

in FlightPlan and that would later accept an object pointer of a class derived from Aircraft? On compile I receive: error: ‘Aircraft’ does not name a type

頭必須包含與類飛機所以它飛行計劃之前聲明。或者你可以使用前置聲明這樣

class Aircraft; 

告訴它的存在和指針可以聲明在類飛行計劃使用類型飛機的編譯器。

你的問題只是關於類型飛機的存在。使用前向聲明或保證在聲明Flightplan之前聲明瞭類。

P.S.不要忘記在Aircaft中的virtual destructor

+0

感謝您記住這一點。 –

+0

您的建議很受歡迎,謝謝。 FlightPlan.h中已經有了Aircraft.h,但這並不適合我。前向聲明的確如此,我也曾用它來解決其他一些問題。再次感謝。 – ajgio23

相關問題