2

そのため、病室をシミュレートするクラスルームを作成しようとしていますが、コンストラクターでエラーが発生し続けます。問題がない場合もありますが、戻ってくることがあります....ここにある他のユーザー定義オブジェクトには、問題のない患者クラスと問題のない LinkedList テンプレート クラスが含まれます。

ヘッダーはこちら

class Room
{
public:

    Room();
    Room(int);
    static LinkedList<Room> createRooms();

    Patient patient;
    int roomNumber;

    bool operator==(const Room &other) const; //overload ==
    bool operator!=(const Room &other) const; //overload !=
    void operator=(const Room &other) const; //overload =



};

そしてcpp

#include "Room.h"

Room::Room();
Room::Room(int n)
{
    roomNumber= n;
    patient= Patient();
}
LinkedList<Room> Room::createRooms() {
    //create rooms up until ROOMS is reached
    LinkedList<Room> roomList;
    for(int i= 1; i < 11; i++){
        Room room= Room(100+i);
        roomList.push(room);
    }
    return roomList;

}
//Overload ==
bool Room::operator==(const Room &other)const{
    //compare each room's room number field
    return (this->roomNumber == other.roomNumber && this->patient == other.patient);

}
//Overload !=
bool Room::operator!=(const Room &other)const{
    return !(this == &other);
}

void Room::operator=(const Room &other)const{
    this->patient= other.patient;
    this->roomNumber= other.roomNumber;
}

問題は Room(int) コンストラクタにあります。Xcode は、関数スタイルのキャストまたは型の構築に '(' が必要であるというメッセージを表示し続けます

何が起こっているのかわかりません

4

3 に答える 3

3

を定義するヘッダーを含めるのを明らかに忘れていましたPatient

 #include "Patient.h"

または類似。

また、

patient= Patient();

冗長であり、メンバーpatientはデフォルトで値が初期化されます。

Room::Room();

は正しくありません - 実装を提供していません。

次に、あなたのデザインには欠陥があるようです。あなたは、患者が部屋の一部であることをほのめかしているように見えますが、そうするために構図を選びました。しかし、そうではありません。部屋が空いていたら?あなたの現在の設計はまだそのケースを扱っていません。

編集:あなたは意味しましたか:

return !(*this == other);

あなたの過負荷でoperator!=

于 2012-12-02T23:52:19.990 に答える
0

次のコンストラクターをヘッダーで「明示的」に変更することを検討してください (「明示的」を悪用しないでください。ただし、場合によっては必要になります)。

explicit Room(int);

クラスが "int" または "const Room&" の両方をコンストラクターのパラメーターとして受け入れるコードの場所がある場合はどうなりますか?

推定:

Hospital(int n); //Hospital constructor where n is number of rooms
Hospital(const Room& room); //Hospital constructor, hosptial made initially by only 1 room

この場合、明示的なコンストラクターなし

Hospital sanGrace(3);

コンパイラは、意図したかどうかを判断できません

Hospital sanGrace(3);

また

Hospital sanGrace(Room(3));

「明示的」を使用すると、強制的に記述されます

Hospital sanGrace(Room(3));

3 番の部屋から SanGrace's Hospital を作成する場合。

同じことが患者クラスにも当てはまります。

于 2012-12-03T00:05:03.450 に答える
0

これは奇妙に見えます:

   Room::Room();

私はあなたがこれを望んでいると思います:

   Room::Room() {}

ただし、空のコンストラクターを使用する代わりに、少なくともメンバー変数を初期化する必要があります。

于 2012-12-02T23:54:30.740 に答える