2017-05-20 5 views
0

次の問題に直面しています。私は以下のクラスを持っています:RoomReservationReservationクラスの場合ReservationクラスのRoom* rsrvRoomメンバをRoomオブジェクトに割り当てる関数(void Reservation :: rsrvRoomAssignment(Room* r))があります。私はRoomオブジェクトの内部からこのクラスを呼び出すことを望みますが、コードを実行する作成されたオブジェクトを引数として正しく渡す方法を手がかりにしていません。作成したオブジェクトをそのオブジェクトの内部から引数として渡します。

コードは、上記の説明:

Reservation.h

class Room; 

class Reservation { 
public: 
    static int rsrvCode; 
    string rsrvName; 
    unsigned int rsrvDate; 
    unsigned int rsrvNights; 
    unsigned int rsrvPersons; 
    Room* rsrvRoom;    // Room assigned to reservation. 
    Reservation(); 
    ~Reservation(); 
    void rsrvRoomAssignment(Room*); 

}; 

Reservation.cpp

#include <iostream> 
#include "Reservation.h" 

using namespace std; 

/* 
    Constructor & Destructor 
*/ 

void Reservation :: rsrvRoomAssignment(Room* r){ 
    rsrvRoom=r; 
} 

Room.h

#include "Reservation.h" 
class Room { 
public: 
    static unsigned int roomNumber; 
    unsigned int roomCapacity; 
    Reservation* roomAvailability[30]; 
    double roomPrice; 
    Room(); 
    ~Room(); 
    bool roomReservationAdd(Reservation*); 
}; 

Room.cpp

#include <iostream> 
#include <string> 
#include "Room.h" 

using namespace std; 

/* 
    Constructor & destructor 
*/ 

bool Room::roomReservationAdd(Reservation* r){ 
    /* some statement that returns flase */ 
    r->rsrvRoomAssignment(/* & of created object */); // This is the problem i described. 
    return 1; 
} 

私はOOPにはかなり新しいので、上記のスナップセットには論理エラーがいくつかある可能性がありますので、過酷ではありません。

ありがとうございました!

+2

'r-> rsrvRoomAssignment(this-> Room);を呼び出すことができます。 「部屋」には「部屋」というメンバーはいませんか? 'r-> rsrvRoomAssignment(this);を意味しましたか? –

+0

@πάνταῥε '私が' Room.cpp'のコメントを記述しようとしている考え方は、 'r-> rsrvRoomAssignment'を呼び出す' Room'クラスの作成されたオブジェクトを 'rsrvRoomAssignment'に引数として渡したいということです。 – Diaman

+0

あなたはC++でポインタを混乱させるべきではありません。どこかで参照を渡す必要がある場合は、参照パラメータ( '&')を使用してください。また、あなたの問題を再現する[MCVE]を投稿してください。すべてのエラーメッセージは逐語的に含まれています。 –

答えて

2

クラスメソッド内にある場合、thisは、それを呼び出すオブジェクトのインスタンスを示します。あなたのケースでは、ルームインスタンスXX.roomReservationAdd(r)を呼び出すと、 は、ルームインスタンスXを指しています。 したがって、あなたは単にr->rsrvRoomAssignment(this);

関連する問題