预期'('用于功能式铸造或类型结构

时间:2012-12-02 23:45:39

标签: c++

所以我正在尝试创建一个模拟医院房间的课堂,但它一直在我的构造函数中给我一个错误。有时候没有问题,但它会回来......其他用户定义的对象包括一个没有问题的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不断给我一个消息,说预期'('用于函数式转换或类型构造

我不知道发生了什么

3 个答案:

答案 0 :(得分:3)

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

 #include "Patient.h"

或类似。

另外,

patient= Patient();

是多余的,默认情况下会员patient将进行值初始化,

Room::Room();

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

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

编辑:你的意思是:

return !(*this == other);

在过载到operator!=

答案 1 :(得分:0)

这看起来很奇怪:

   Room::Room();

我想你想要这个:

   Room::Room() {}

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

答案 2 :(得分:0)

您可以考虑在标题中将以下构造函数更改为“explicit”(从不滥用“显式”但有时需要)

explicit Room(int);

如果您的代码中有一个类接受“int”或“const Room&amp;”的地方怎么办?作为构造函数参数?

假设:

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医院。

同样适用于患者类。