2015-01-20 51 views
-3

我有一個代碼,其中在如何使用另一個對象指針初始化類的實例?

class Passenger; 

    class Reservation { 
      std::string coach; 
      int seat_number; 
      Passenger * traveller; 
    public: 
      Reservation (Passenger * pas, std::string coch, int seat); 
      void showReservation(); 
    }; 

然後定義功能

Reservation::Reservation(Passenger * pas, string coch, int seat) : coach(coch), seat_number(seat) { 
      traveller = new Passenger(pas); 
    } 

這顯示了一個錯誤,當我這樣做。

這將工作,而不是使用*我使用&。我想用pas值初始化新的對象旅行者。怎麼做 ?

+1

有什麼錯誤? – Axalo 2015-01-20 23:07:36

+0

你在找'旅行者=新乘客(* pas);'很可能沒有'乘客*旅行者'的理由,'它應該是'乘客旅行者;' – Praetorian 2015-01-20 23:09:48

回答

1

你在這裏混合兩個想法。要麼你要複製的指針:

traveller = pas; 

或者你想要做的對象的深副本:無論你想

traveller = new Passenger(*pas); 

取決於你想如何使用Reservation。它是否擁有自己的Passenger?看起來像Reservation不應該擁有Passenger,所以有可能第一個是你想要的。

需要注意的是,如果你使用的智能指針表示所有權,這可能是更清楚:

class Reservation { 
    std::string coach; 
    int seat_number; 
    std::shared_ptr<Passenger> traveller; 

    // etc. 
}; 
+0

非常感謝,我懂了 – 2015-01-21 06:19:19