2016-04-03 3 views
2

У меня есть множество функций, написанных для реализации в связанном списке объектов. Все, что я оставил, чтобы написать, это display_list() и save_to_file() функции, которые мне кажутся довольно трудными. В настоящее время у меня есть код для того, как это делается со строками вместо объектов Пассажира, но ни одно из моих преобразований не работает. Ниже приведены только соответствующие части файлов.Показать и сохранить связанный список объектов

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

Рода должен Tak e от перегруженных операторов (== и <), так что они сортируются лексикографически по фамилии.

Любая помощь будет очень признательна!

+2

Из того, что я вижу, вы, кажется, отсутствует перегруженный '' оператор << для выполнения потока-вставки. Это в основном то, с чем вы столкнулись? Для вопросов о перегрузке оператора я отсылаю вас к [этому вопросу и его ответам] (https://stackoverflow.com/questions/4421706/operator-overloading), которые вы можете найти * очень * полезным. В частности, найдите «Bitshift Operators (используемые для Stream I/O)» в выбранном ответе звезды. – WhozCraig

ответ

0
bool Flightlist::check_reservation(Passenger p); 

Аргумент check_reservation функции должны быть переданы по ссылке, или функция assgin из класса Passenger должны быть реализованы, что в ней отсутствует.

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

Смежные вопросы