我编写了一个使用链接列表list<Passenger> flight list
运行的航空公司预订系统。
我认为我所写的功能应该有效,但我无法测试它们,因为我无法让我的乘客上班。
(适用database.h)
class Passenger
{
public:
Passenger(string, string, string);
~Passenger();
Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;
void read_from_file(list<Passenger>&, string);
void insert(list<Passenger>&, string, string, string);
void remove(list<Passenger>&, string, string, string);
bool check_reservation(list<Passenger>&, string, string);
void display_list(list<Passenger>&);
void save_to_file(list<Passenger>&, string, string, string);
private:
string fname;
string lname;
string destination;
};
(适用database.cc)
Passenger::Passenger(string first, string last, string dest)
{
fname = first;
lname = last;
destination = dest;
}
Passenger::~Passenger()
{
}
Passenger Passenger::operator==(const Passenger&)
{
}
Passenger Passenger::operator<(const Passenger&)
{
}
应该重载运算符,以便比较名字和姓氏,以便按姓氏按字典顺序对列表进行排序。
正确方向的任何一点都会非常有帮助。
谢谢!
答案 0 :(得分:1)
问题是运营商超载的结果:
Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;
比较应该返回bool
,而不是Passenger
。所以尝试:
bool operator==(const Passenger&) const;
bool operator<(const Passenger&) const;
例如,具有以下实现:
// and don't forget the trailng const to match the signature !
bool Passenger::operator==(const Passenger& p) const
{
return fname==p.fname && lname==p.lname;
}
bool Passenger::operator<(const Passenger& p) const
{
return fname<p.fname || (fname==p.fname && lname<p.lname);
}
这里是online demo