damnja Ivan Damnjanovic nis
Član broj: 125283 Poruke: 8 *.adsl.verat.net.
|
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 Beograd
Član broj: 29116 Poruke: 387 *.dialup.neobee.net.
|
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 上海, 中国
Član broj: 1811 Poruke: 1342 58.32.235.*
ICQ: 14293955 Sajt: https://github.com/milost..
|
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 Vladimir Stefanovic Pozarevac
SuperModerator Član broj: 15100 Poruke: 4939 *.tekostolac.co.yu.
|
O serijalizaciji je bilo par puta reci na ES-u:
http://www.elitesecurity.org/t168890
|
|
| |
|
damnja Ivan Damnjanovic nis
Član broj: 125283 Poruke: 8 *.adsl.verat.net.
|
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 Beograd
Član broj: 29116 Poruke: 387 *.adsl.verat.net.
|
@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...
|
|
| |
|