![](/img/trans.png)
[英]c++ Xcode expected '(' for function-style cast or type construction
[英]Expected '(' for function-style cast or type construction
所以我试图创建一个模拟病房的房间,但它一直在我的构造函数中给我一个错误。 有时没有问题,但后来又回来了……这里的其他用户定义对象包括一个没有问题的 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 不断给我一条消息,说对于函数式强制转换或类型构造,预期为 '('
我不知道是怎么回事
您显然忘记包含定义Patient
的标头:
#include "Patient.h"
或类似。
还,
patient= Patient();
是多余的,默认情况下成员patient
将进行值初始化,并且
Room::Room();
不正确 - 您没有提供实现。
其次,你的设计似乎有缺陷。 你似乎暗示病人是房间的一部分,并选择了构图来做到这一点。 但事实并非如此。 如果房间是空的怎么办? 您当前的设计尚未处理这种情况。
编辑:你的意思是:
return !(*this == other);
在您对operator!=
重载中?
这看起来很奇怪:
Room::Room();
我想你想要这个:
Room::Room() {}
您可能至少应该初始化成员变量,而不是拥有一个空白的构造函数。
您可以考虑在标题中将以下构造函数更改为“explicit”(不要滥用“explicit”,但有时需要)
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 医院。
这同样适用于 Patient 类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.