[ stale85 @ 21.06.2003. 14:16 ] @
Napravio sam program za cuvanje spiska alata. Kada sam mu stavio da upisuje i cita iz fajla on nikako nije citao te podatke. Inace sam koristio asocijativni sablon map.
Da li ja mogu da upisujem u fajl (objekat map<string, Alat> PrvaPolica)sa komandama

if (!izbor1)
{
ofstream fout("PAlati", ios::binary);
fout.write((char*)& PrvaPolica, sizeof PrvaPolica);
fout.close();
}
i citam sa

ifstream fin("PAlati", ios::binary);
if (fin.good())
{
fin.seekg (0, ios::end);
duzina = fin.tellg();
fin.seekg (0, ios::beg);
fin.read((char*)& PrvaPolica, EOF);
fin.close();
}
else
fin.close();
Citav izvorni fajl sam vam ostavio ako zelite da ga vidite. Bez ucitavanja iz fajla sve lepo radi ali dzaba ako kada gasnem program mora sve iz pocetka.
P.S. Kako bih mogao da izbrisem prethodne poruke sa ekrana?
[ tOwk @ 21.06.2003. 16:47 ] @
Malo si pogrešno shvatio šta je C++ — on samo omogućava, a ne implementira sve.

Za ovaj posao tvoje „rešenje“ nikako ne valja, i kosi se sa osnovnim principima OOP-a.

Ono što ti treba da uradiš je sledeće:
— napraviš funkciju za upis podataka u fajl (možda iskoristiš i operator<< za ostream).
— napraviš funkciju za čitanje podataka iz fajla (možda iskoristiš i operator>> za istream).

I zatim podatke čitaš i pišeš pomoću „fout << PrvaPolica“, tj. „fin >> PrvaPolica“.
[ stale85 @ 22.06.2003. 17:25 ] @
Hvala ti sto si mi ukazao na moju gresku sto se tice OOP, ali ipak ne svatam kako da uradim upisivanje
u fajl sa operatorom >> ili sa nekom zasebnom funkcijom, ali ne znam sta bi u njoj zapisao.
Imam pitanje i u vezi iteratora jer ne svatam njihovu strukturu. Oni su objekti koji pokazuju na druge objekte. Da li oni pokazuju na instancu
(map <string, Alat>) sablonske klase ili na neki drugi objekat, jer ne znam kako bi mogao da napravim funkciju koja bi mi ispisivala sve alate koji se nalaze na spisku.
P.S. Napomenite mi ako nesto dobro nisam razumeo.
[ Reljam @ 22.06.2003. 19:41 ] @
To sto si sada opisao je problem serijalizacije:

PAlat sadrzi brojne pointere, sto na stringove, sto na Alate, znaci ne mozes da ga prosto dumpujes na disk. Moras da rucno prodjes kroz niz svih (string, Alat) parova i da ih snimis na odgovarajuci nacin. Verovatno i Alat sadrzi neke pointere koje ces morati da nekako snimis. Znaci pseudokod bi izgledao ovako:

foreach string Key in PAlat.Keys
{
Save(Key);
Save(PAlat[Key]);
}

[ stale85 @ 22.06.2003. 20:08 ] @
Svatio sam kako rade iteratori i funkciju za ispisivanje sam napravio veoma jednostavno
void PokaziSveAlate(const ZbirkaAlata& Polica)
{
for (ZbirkaAlata::const_iterator ci=Polica.begin(); ci != Polica.end();ci++)
cout << (*ci).second;
}
Naravno moram da napravim i
ostream& operator << (ostream& out, const Alat& Alat)
{
out <<"<"<< Alat.iIme() <<">\t\t\t\t\t\t\t<"<< Alat.iKolicina() <<">\t<"<< Alat.iCena() <<">"<<endl;
return cout;
}
[ stale85 @ 30.06.2003. 07:44 ] @
Uspeo sam da resim problem na lak nacin. Tako da cu ostaviti ovde ako neko bude imao slican problem.