C++ 链表 - 构造函数和运算符重载

C++ Linked List - Constructor and Operator Overloading

我编写了一个运行链表的航班预订系统list<Passenger> flight list

我认为我编写的函数应该可以工作,但我无法测试它们,因为我无法让我的乘客 class 正确。

(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&)
{

}

应重载运算符,以便比较名字和姓氏,并按姓氏的字典顺序对列表进行排序。

在正确方向上的任何一点都会很有帮助。

谢谢!

问题是你的运算符重载的签名:

Passenger operator==(const Passenger&) const;
Passenger operator<(const Passenger&) const;

比较应该 return 和 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