2016-04-03 43 views
2

我有许多功能被写入在对象的链表上实现。我只剩下要写的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(); 
} 

排序应德e来自重载运算符(==和<),以便按照字典顺序对姓氏进行排序。

任何帮助将不胜感激!

+2

从我所看到的,你似乎缺少重载'运营商<<'执行流插入。这基本上是你遇到什么问题吗?对于操作符重载问题,我将您引用到[此问题及其答案](https://stackoverflow.com/questions/4421706/operator-overloading),您可能会发现*非常有用。具体而言,请在恒星选定答案中查找“Bitshift运算符(用于Stream I/O)”。 – WhozCraig

回答

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; 

}; 
+0

check_reservation函数实际上是唯一在那里工作的函数吗? – Brittany

+0

@Brittany否则,只需实现Pasenger的对象分配功能 – lulyon

+0

我不明白你的意思?对于display_list和save_to_file类? – Brittany