[ damnja @ 11.07.2008. 01:03 ] @
Kako da snimim instancu neke klase u datoteku, i kasnije da je ponovo ucitam u klasu.
probao sam sa jednostavnijim primerom, snimanje strukture, ali se javlja problem.
evo primer koda

#include <fstream.h>
#include <string.h>

struct Radnik
{
char ime[30];
double plata;
};

void main()
{
Radnik r;
strcpy(r.ime, "Josip Broz");
r.plata = 103.45;

ofstream os("plata.dat", ios::binary );
os.write((char *)( &r), sizeof(Radnik));
os.close();

Radnik p;
ifstream is( "plata.dat", ios::binary | ios::nocreate );
is.read( (char *) &r, sizeof(Radnik) );
cout << p.ime << ' ' << p.plata << endl;
is.close();
}

ime lepo odstampa, ali za platu stampa -9.25596e+061
Zasto se ovde javlja greska, kako da je ispravim, i dali mogu da se snimaju klase kao i strukture?!
[ Goran Arandjelovic @ 11.07.2008. 02:40 ] @
Možda igrom slučaja dobro štampa ime...
jer u poslednjem is.read kao argument treba da bude &p, a ne &r. Posle toga bi trebalo da radi.

Ne znam da li ti je ovo primer iz neke knjige ili si ti pisao...ali je generalno loše napisan.
main f-ja po Standardu vraća int, fstream.h je depricated (podseća na vreme TurboCPP-a).

Možeš i klase i strukture...(u C++-u, struktura == klasa u kojoj su polja po defaultu public, a ne private).
[ tosa @ 11.07.2008. 06:24 ] @
Problem koji si opisao je u stvari serijalizacija objekata i ne postoji neko standardno rešenje za to.
Možeš i sam da razviješ sistem a možeš i da pogledaš neko od gotovih rešenja kao što je boost::serialization
da bi dobio ideju kako to radi.
[ X Files @ 11.07.2008. 06:46 ] @
O serijalizaciji je bilo par puta reci na ES-u:
http://www.elitesecurity.org/t168890
[ damnja @ 11.07.2008. 15:48 ] @
Da, Gorane, sto se tice prigovora, da u poslednjem is.read treba da stoji &p, tako sam i radio, samo sam ovde u kucanju pogresio.
Znaci, opet vraca pogresnu vrednost, i to je ono sto mene muci.
Sto se tice serilizacije, nisam upoznat sa time, ali cu da potrazim. Hvala na savetu.
[ Goran Arandjelovic @ 11.07.2008. 19:54 ] @
@damnja
Kao što ti Toša reče, najpre recimo vidi boost... a usput čitaj o serijalizaciji, jer razvijanje nekog svog sistema može da bude proizvoljno komplikovano u zavisnosti od potreba (tipa ako rešiš da razvijaš neki svoj interfejs...pa naiđeš i na neke probleme sa nasleđivanjem tog svog interfejsa.. zbog samog layouta kod MI)... Naravno, uopšte ne mora da bude komplikovano za neke specifične potrebe...