C++ 显示和保存对象的链接列表

C++ 显示和保存对象的链接列表,c++,linked-list,iterator,C++,Linked List,Iterator,我编写了许多函数来在对象的链接列表上实现。我只剩下写display\u list()和save\u to\u file()函数了,这对我来说相当困难。我目前已经有了如何使用字符串而不是乘客对象进行转换的代码,但是我的转换都不起作用。以下仅为文件的相关部分 main.cc case 5: { display_list(); break; } case 6: { save_to_file("ticket_reservations.dat"); break; }

我编写了许多函数来在对象的链接列表上实现。我只剩下写
display\u list()
save\u to\u file()
函数了,这对我来说相当困难。我目前已经有了如何使用字符串而不是乘客对象进行转换的代码,但是我的转换都不起作用。以下仅为文件的相关部分

main.cc

case 5: 
{
    display_list();
    break;
}

case 6: 
{
    save_to_file("ticket_reservations.dat");
    break;
}
bool Flightlist::check_reservation(Passenger p)   //example of working function
{
    list<Passenger>::iterator i1, i2;
    i1 = flist.begin();
    i2 = flist.end();
    return flist.end() != find(flist.begin(), flist.end(), p);
}

void display_list()
{
    flist.sort();
    list<Passenger>::iterator i1, i2;
    i1 = flist.begin();
    i2 = flist.end();
    for ( ; i1 != i2; ++i1) {
        cout << *i1 << endl;
    }
}

void save_to_file(string filename)
{
    flist.sort();
    list<Passenger>::iterator i1, i2;
    i1 = flist.begin();
    i2 = flist.end();
    ofstream output(filename.c_str());
    for ( ; i1 != i2; ++i1) {
        output << *i1 << " ";
    }
    output.close();
}
数据库.h

include<list>
#include<algorithm>
#include<iostream>
#include<string>
#include<fstream>
#ifndef passenger_h
#define passenger_h
 using std::string;
 using std::cin;
 using std::cout;
 using std::list;
 using std::endl;

class Passenger {
public:
    Passenger() {}
    Passenger(string, string, string);
    bool operator==(const Passenger&) const;
    bool operator<(const Passenger&) const;
private:
    string fname, lname, destination;

};

class Flightlist {
public:
    int menu();
    void read_from_file(string);
    void insert(Passenger p);
    void remove(Passenger p);
    bool check_reservation(Passenger p);
    void display_list();
    void save_to_file(string)
private:
    list<Passenger> flist;
};

#endif
包括
#包括
#包括
#包括
#包括
#ifndef客运站
#定义乘客
使用std::string;
使用std::cin;
使用std::cout;
使用std::list;
使用std::endl;
头等舱乘客{
公众:
乘客(){}
乘客(绳子,绳子,绳子);
布尔运算符==(常数乘客和)常数;
布尔运算符
check\u reservation
函数的参数应该通过引用传递,或者应该实现
Passenger
类的assgin函数,该函数中没有

bool Flightlist::check_reservation(Passenger & p);
或:

class乘客{
公众:
乘客(){}
乘客(绳子,绳子,绳子);
乘客(乘客),;
无效运算符=(常数乘客和)常数;
布尔运算符==(常数乘客和)常数;

bool运算符check_reservation函数实际上是唯一在那里工作的函数?@Brittany否则,只需为PasengerI实现对象分配函数,不明白您的意思吗?对于显示列表和保存到文件类?@lulyon
check_reservation
不修改参数,搜索将调用
运算符==
。除了效率之外,没有理由将该参数作为参考(理想情况下,它将是
const
),也不需要重载默认赋值运算符,它将按原样深度复制该类。(而且这两者都不能解决OP的问题)。最后,在哪个星球上是一个(不需要)重载赋值运算符
const
?@Brittany我敦促您检查我在一般评论中提供的链接。它涵盖了关于运算符重载的各种主题,包括我认为您似乎需要的内容:重载流插入,
std::ostream&operator从我看到的情况来看,您似乎缺少重载的
>接线员
bool Flightlist::check_reservation(Passenger & p);
class Passenger {
public:
    Passenger() {}
    Passenger(string, string, string);
    Passenger(const Passenger&);
    void operator=(const Passenger&) const;
    bool operator==(const Passenger&) const;

    bool operator<(const Passenger&) const;
private:
    string fname, lname, destination;

};