Ok, il costruttore di copia è giusto.. adesso funziona il programma ma c'è sempre qualche problema e credo sia dovuto agli stream perchè se il file input.txt è solo fatto ad es. così:
mario rossi 20 3 20 2 mouse 20 2 tastiera 13 2 disco
viene caricato e visualizzato bene sullo schermo, invece se lo faccio così (come dovrebbe essere):
mario rossi 20 3 20 2 mouse 20 2 tastiera 13 2 disco
marco bianchi 15 2 150 5 stampante 700 3 pc
roberto biagi 20 1 300 4 ipod
biagio antonacci 20 3 20 1 cavo 20 1 software 440 2 servizi
giuseppe grillo 20 2 8000 1 service 4000 1 catering
non funziona nulla, mi appare ancora solo la schermata nera..
Adesso inserisco gli stream, così magari potete vedere se c'è qualcosa ke non va:
L'istream l'ho modificato così e va bene sia se ho Vector che List:codice:ostream &operator<<(ostream &out, Fattura &r) { out<<r.nome<<" "<<r.cognome<<" "<<r.iva<<" "; for(int i=0; i<(int)r.prezzo.size(); i++) { out<<r.prezzo[i]<<" "; cout<<endl; } for(int j=0; j<(int)r.quantita.size(); j++) { out<<r.quantita[j]<<" "; cout<<endl; } for(int z=0; z<(int)r.descrizione.size(); z++) { out<<(r.descrizione[z])<<" "; cout<<endl; } return out; }
E infine gli stream di In e Out per la List:codice:istream &operator>>(istream &in, Fattura &r) { char temp[100]; int app, num; in>>temp; r.setNome(temp); in>>temp; r.setCognome(temp); in>>app; r.setIva(app); vector<float>::iterator p=r.prezzo.begin(); while(p!=r.prezzo.end()) { float app; in>>app; r.prezzo.push_back(app); } vector<int>::iterator s=r.quantita.begin(); while(s!=r.quantita.end()) { int app; in>>app; r.quantita.push_back(app); } vector<char*>::iterator t=r.descrizione.begin(); while(t!=r.descrizione.end()) { char* app; in>>app; r.descrizione.push_back(app); } return in; }
P.S: nel main non faccio altro che questo:codice:ostream &operator<<(ostream &o, list<Fattura> &l) { list<Fattura>::iterator p = l.begin(); while(p != l.end()) { o << *p<<" "; p++; } cout<<endl; return o; } istream &operator>>(istream &i, list<Fattura> &l) { while(!i.eof()) { Fattura app; i >> app; if(!i.eof()) { l.push_back(app); } } return i; }
Ragazzi grazie mille cmq per l'attenzione e il tempo che mi dedicate..codice:int main(int argc, char** argv) { list<Fattura> l1; ifstream in; in.open("input.txt", ios::in); in>>l1; in.close(); cout<<l1; system("PAUSE"); return (EXIT_SUCCESS); }![]()

Rispondi quotando