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:
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; }
L'istream l'ho modificato così e va bene sia se ho Vector che 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;
}
E infine gli stream di In e Out per la List:
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;
}
P.S: nel main non faccio altro che questo:
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);
}
Ragazzi grazie mille cmq per l'attenzione e il tempo che mi dedicate..