2016-04-03 60 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