> "acs" <abbaratet@live.dk> wrote in message
> news:54f0b4d4-adbe-404a-9381-a15fcb1aeb1b@m26g2000yqb.googlegroups.com...
[8<8<<8]
> Hvad går der galt og er der evt en bedre metode at gøre dette på?
Det der helt konkret går galt er at du skriver adressen på pegeren byer ud i
filen, for derefter ved indlæsning at tildele by2 værdien af adressen på
byer.
Det giver ingen mening (så programmet crasher), og dine cast (jeg
foretrækker C++ cast frem for C cast - i dette tilfælde skal det være
reinterpret_cast) skjuler det for dig.
Castene siger til compiler "bare rolig - jeg har styr på hvad der sker" ...
Derudover giver det den konkrete værdi af en pointer ikke meget mening at
gemme i en fil. Den kan bruges en unik identifikation af et objekt, men kan
bruges som pointer værdi når den læses igen.
Ydermere skal objekts _værdi_ skrives ud i filen (f.eks. byens navn) hvis
den skal kunne genskabes.
Det du har fat i er serialisering af objekter.
Borland C++ havde i gamle dage et klassebibliotek der kunne det - jeg ved
faktisk ikke om det stadig er tilfældet (selvom jeg fortsat bruger .
Det virkede udemærket, men den slags teknologi giver nemt nogle problemer
med versionering osv. fordi det laver en hård kobling mellem
implementeringen af et objekt og persistens formatet.
Hvis det skal være mere robust syntes jeg man er bedre tjent med at bruge en
egentlig database eller skrive informationen i en tekst konfigurations fil
(f.eks. en INI fil).
Hvis man har brug for serialisering af objekter i C++ vil jeg anbefale at
kigge på Boost.Serialization
http://www.boost.org/doc/libs/1_41_0/libs/serialization/doc/index.html
Jeg har ikke selv prøvet det bibliotek, men bibliotekerne i Boost plejer at
være gode.
Java har reflection, som (så vidt jeg husker) kan give information på
run-time om hvilke data-medlemmer der er i en klasse, og dermed kan
automatisere serialisering på run-time.
C++ har ikke reflection, og hvis man skulle automatisere serialisering i C++
skal det gøres på compile-time med ekstra værktøjer, og der bliver nogle
problemer med hvor objekterne er allokeret (i Java har man kun een
mulighed - i C++ har man (mindst) 3).
Iøvrigt mener jeg generelt at man er bedst tjent med at bruge engelske navne
på egne klasser, objekter og kommentarer - men det er en helt anden sag.
Alle nøgleord i C++ (og mange andre programmeringssprog) er engelsk, og man
får en underlig sammenblanding af engelsk og dansk.
Når man har vedligeholdt programmer, der oprindeligt er skrevet i Tyskland,
Frankrig og Finland, bliver man mere overbevist om den holdning
--
Venlig hilsen
Mogens Hansen