У меня есть множество функций, написанных для реализации в связанном списке объектов. Все, что я оставил, чтобы написать, это 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 от перегруженных операторов (== и <), так что они сортируются лексикографически по фамилии.
Любая помощь будет очень признательна!
Из того, что я вижу, вы, кажется, отсутствует перегруженный '' оператор << для выполнения потока-вставки. Это в основном то, с чем вы столкнулись? Для вопросов о перегрузке оператора я отсылаю вас к [этому вопросу и его ответам] (https://stackoverflow.com/questions/4421706/operator-overloading), которые вы можете найти * очень * полезным. В частности, найдите «Bitshift Operators (используемые для Stream I/O)» в выбранном ответе звезды. – WhozCraig