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