Programowanie > C/C++ - KDE/Qt

qt i binarny zapis/odczyt

<< < (2/3) > >>

amdfanatyk:
te funkcje nie sa metodami klasy; tworze egzemplarz klasy a potem albo zrzucam go do pliku albo wczytuje ale tak ogolnie to metody klasy nie sa zrzucane do pliku :]

xis:
Dopiero teraz to zobaczyłem:

QFile * fin = new QFile(dir.path() + "/data");

fin->open(IO_ReadOnly);
fin->readBlock((char *)data, sizeof(data));
fin->close();

Używasz tu sizeof(data), ale czy masz już stworzony za pomocą konstruktora egzemplarz tej klasy?

Być może możesz użyć tylko sizeof( CKlasa );

O ile pamiętam 'sizeof()' może przyjąć za argument nie tylko obiekt, ale też nazwę typu obiektu, w ten sposób oszacuje sobie jego wielkość. Nie pamiętam już, ale sizeof() byc może zwraca wartośc ujemną gdy dostaje NULL.
Strzelam, bo kompletnie nie pamiętam. Mogłeś zapisać wszystko w XML i byś miał kłopot z głowy :)
Ech, zapomniałem już te wszystkie tricki ze wskaźnikami.

amdfanatyk:
robilem teraz z fstream i read oraz write i efekt jest taki sam :(

wnioski:
a) dane binarnie zapisane do pliku moze czytac tylko proces, ktory je utworzyl?? cos z kernelem??
b) wina gcc 4
c) nie zanosi sie na to, zebym sobie z tym poradzil :(

wojtekm:
Twój problem prawdopodobnie polega na tym, że nowa instancja progrmu, która wczytuje dane wykonuje się w _zupełnie innym kontekście_, tzn. że pola metod klasy wczytanej z pliku mają wskaźniki wzięte z kosmosu (a dokładnie z nieistniejącego już procesu), które nie mają nic wspólnego z aktualnie wykonywanym procesem.
IMHO taki trick może wyjść tylko na zwykłych strukturach, ktróre nie przechowuja wskaźników.
Taka zabawa jest możliwa np. w pythonie, gdzie metody klasy są rozpoznawane dynamicznie po nazwie, ale nie w C++ gdzie wszytsko jest "zafixowane" wskaźnikami.

Wojtek

amdfanatyk:
prawdopodobnie masz racje ale dlaczego zatem spokojnie zrzucalem egzemplarze klasy korzystajac z MFC na windzie i wszystko dzialalo??

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej