webForumDet fria alternativet

spara objekt på fil i binärform

C/C++

4 svar · 657 visningar · startad av mangan

Medlem sedan feb. 2003216 inlägg
Frågan#1

Hej!

Har lite problem att spara ner mina objekt i en fil. jag vill spara dom i binärform så inläsning av dom i ett senare skede blir lättare.
jag har provat följande:

  ofstream smf("email.ema", ios::binary);
  Email *epost = new Email();
  int i = 0;
  if(smf.is_open()) { // kollar om filströmmen är öppen
    for(;i<(int)mejl.size();i++){
      epost->copyEmail(mejl[i]);
      smf.write(&epost, sizeof(Email));
    }
    smf.close();
  }

men får kompileringsfel enligt följande:

mainwin.cpp: In member function `void MainWin::avsluta()':
mainwin.cpp:84: no matching function for call to `std::basic_ofstream<char,
   std::char_traits<char> >::write(Email**, unsigned int)'
/usr/include/g++-v3/bits/ostream.tcc:370: candidates are:
   std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT,
   _Traits>::write(const _CharT*, int) [with _CharT = char, _Traits =
   std::char_traits<char>]

Kan någon se vad som är fel?

Skulle också gärna vilja ha förslag på hur jag ska läsa in objektet igen

Medlem sedan apr. 2003100 inlägg
#2

Hmmm,, vad gör din for sats egentligen? Jag kanske är dum, men jag lyckas inte klura ut vad den är till för.

ofstream smf("email.ema", ios::binary);
smf.write(&epost, sizeof(Email));
smf.close();

Denna kod räcker om du bara vill spara objektet binärt:
För att öppna den igen gör du på samma sätt, bara att ofstream objektet istället ska vara av typen ifstream (tror jag att den heter)

Nu vet ju inte jag vad du vill göra, men detta är ett enkelt sätt att spara och läsa binärt.

Medlem sedan maj 20018 027 inlägg
#3

Jag ser ett fel:

smf.write(&epost, sizeof(Email));

borde vara:

smf.write(epost, sizeof(Email));

alltså utan "&" före "epost". "epost" är ju redan en pekare, så det fel du gjorde var att skicka en pekare till en pekare.

Medlem sedan feb. 2003216 inlägg
#4

Verkar inte som om jag kan få det att funka med inläsningen hur jag än gör. I alla exempel jag har sett så är det en struct som man skriver ner till filen men det jag har är ett objekt. Jag tvingas nog överge binärsskrivning/läsning pga tidsbrist, men tack för hjälpen

Medlem sedan juni 200010 432 inlägg
#5

En strukt är som en array, dvs en samling data fast åtskillt enligt storleken på de ingående komponenterna. Lika med en klass. Du gör antagligen nåt annat fel. För lite mer exempel på hur göra, kolla -> http://www.mta.ca/~amiller/cs2621/cppfiles.html

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)