2015-01-20 5 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

+0

당신은'traveler = new Passenger (* pas);를 찾고 계십니까? 'Passenger * traveler;의 이유는 없습니다.'Passenger traveller'여야합니다. – Praetorian

답변

1

여기에 두 가지 아이디어가 혼합되어 있습니다. 어느 쪽이든 당신은 포인터를 복사 할 :

traveller = pas; 

을 아니면 객체의 딥 카피하고 싶지 : 당신이 원하는 어느

traveller = new Passenger(*pas); 

당신이 사용 Reservation을 원하는 방법에 따라 달라집니다. 자체적으로 Passenger을 소유하고 있습니까? ReservationPassenger을 소유해서는 안되기 때문에 처음에는 원하는 내용이 될 것 같습니다.

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

    // etc. 
}; 
+0

고맙습니다. –

관련 문제