2

所以我正在尝试创建一个模拟医院病房的教室,但它一直在我的构造函数中给我一个错误。有时没有问题,但随后又回来了....此处的其他用户定义对象包括没有问题的 Patient 类和也没有问题的 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 不断给我一条消息,说 Expected '(' for function-style cast or type construction

我不知道是怎么回事

4

3 回答 3

3

您显然忘记包含定义的标题Patient

 #include "Patient.h"

或类似的。

还,

patient= Patient();

是多余的,默认情况下该成员patient将被值初始化,并且

Room::Room();

不正确-您没有提供实现。

接下来,您的设计似乎有缺陷。您似乎暗示患者是房间的一部分,并选择了组合来这样做。但事实并非如此。如果房间是空的怎么办?您当前的设计尚未处理这种情况。

编辑:你的意思是:

return !(*this == other);

在你超载到operator!=

于 2012-12-02T23:52:19.990 回答
0

这看起来很奇怪:

   Room::Room();

我想你想要这个:

   Room::Room() {}

您可能至少应该初始化成员变量,而不是使用空白构造函数。

于 2012-12-02T23:54:30.740 回答
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 医院。

这同样适用于患者类别。

于 2012-12-03T00:05:03.450 回答