2016-04-03 9 views
2

Ich habe zahlreiche Funktionen, die für die Implementierung in einer verknüpften Liste von Objekten geschrieben wurden. Alles was ich noch schreiben muss, sind die display_list() und die save_to_file() Funktionen, die sich als ziemlich schwierig für mich erweisen. Ich habe derzeit den Code dafür, wie es mit Strings anstelle von Passagierobjekten gemacht wird, aber keiner meiner Konvertierungen funktioniert. Im Folgenden sind nur die relevanten Teile der Dateien aufgeführt.Verknüpfte Objektliste anzeigen und speichern

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

Die Art sollte tak e von den überladenen Operatoren (== und <), so dass sie lexikografisch auf den Nachnamen sortiert sind.

Jede Hilfe wäre sehr willkommen!

+2

Von dem, was ich sehe, Sie scheinen die überladenen 'Betreiber zu fehlen <<' zu Strom-Einfügung durchzuführen. Haben Sie damit grundsätzlich Probleme? Für Fragen zur Operatorüberlastung empfehle ich Ihnen [diese Frage und ihre Antworten] (https://stackoverflow.com/questions/4421706/operator-overloading), die Sie möglicherweise * sehr * hilfreich finden. Suchen Sie speziell nach "Bitshift-Operatoren (für Stream I/O)" in der stellaren ausgewählten Antwort. – WhozCraig

Antwort

0
bool Flightlist::check_reservation(Passenger p); 

Das Argument der Funktion check_reservation sollte Bezug genommen wird, oder die Funktion der assgin Passenger Klasse übergeben werden soll, durchgeführt werden, die in ihm vorhanden ist.

bool Flightlist::check_reservation(Passenger & p); 

oder:

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

die checkReservation Funktion ist eigentlich die einzige, die dort funktioniert? – Brittany

+0

@Brittany Ansonsten implementieren Sie einfach die Objektzuweisungsfunktion für Pasenger – lulyon

+0

Ich verstehe nicht, was du meinst? Für die Klassen display_list und save_to_file? – Brittany

Verwandte Themen