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

时间:2016-04-03 07:31:57

标签: c++ linked-list iterator

我编写了许多函数来实现对象的链接列表。我要写的只是display_list()save_to_file()函数,这对我来说非常困难。我目前有关于如何使用字符串而不是Passenger对象的代码,但我的转换都不起作用。以下仅是文件的相关部分。

main.cc

case 5: 
{
    display_list();
    break;
}

case 6: 
{
    save_to_file("ticket_reservations.dat");
    break;
}

database.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

database.cc

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();
}

排序应该来自重载的运算符(==和&lt;),以便按字典顺序对它们进行排序。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

bool Flightlist::check_reservation(Passenger p);

check_reservation函数的参数应该通过引用传递,或者应该实现Passenger类的assgin函数,其中不存在。

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;

};