Quantcast

Čitanje iz binarne datoteke (C++)

Kurt2

Ističe se
Poruka
2.410
Imam klasu Student, u njoj privatne atribute ime, prezime, indeks i dinamiči niz pod nazivom niz. Koristim fstream za upis u fajl, i to (valjda) prođe kako treba. Problem se javlja kod čitanja. Da li treba sam da kreiram dinamički niz ili ne? kako bi to uopšte išlo??? Za pisanje u fajl koristim funkciju u okviru klase koja se zove upis, i f-ja izgleda ovako:

Kod:
void Student::upis()
{
	ofstream os("podaci.dat", ios::binary);
	os.write((char*) this, sizeof(this));	
	os.close();
}
za čitanje sam hteo:

Kod:
void Student::citanje()
{
	ifstream is("podaci.dat", ios::binary | ios::nocreate);
	
	if( is ) 
		is.read( (char *) this, sizeof(Student) );
	is.close();
}
međutim, to ne ide kako treba... Da konkretizujem pitanje: kako da iz binarnog fajla čitam objekat koji ima dinamičke elemente?
 

Kurt2

Ističe se
Poruka
2.410
Ok, prepravio sam da bude student umesto this, i sada mi iz binarnog fajla iščita i statičke atribute i niz koji je dinamički, ali program na kraju pukne! Pretpostavljam da se radi o destruktoru, koji dinamički niz koji treba da obriše traži na pogrešnom mestu! Kako da sada pokazivač na niz koji je iščitan iz fajla "preusmerim" na traženu memorijsku lokaciju?
 

Lord British

Primećen član
Poruka
560
Nemoj da pretpostavljash, nego kad program krene da puca poteraj ga kroz debugger i nadji problem.

U sluchaju da jeste destruktor - kada uchitavash tu klasu niz uvek kreiraj od nule, pa u njega uchitaj to shto je bilo u originalnom nizu. Pointeri se nikad ne snimaju i uchitavaju 'goli'
 

Kurt2

Ističe se
Poruka
2.410
Problem jeste sa destruktorom. Evo main funkcije:

Kod:
#include "Student.h"
#include <iostream.h>

void main()
{
	Student Pera(3); //Kreira se objekat Pera tipa Student sa 3 ocene 
	Pera.ucitaj(); //Učitavaju se podaci sa tastature (ime, prezime, indeks i tri ocene smeštene u dinamički niz)
	Pera.upis(); //Podaci se upisuju u binarni fajl
	Student Misa(3); //Kreira se drugi objekat - Misa tipa Student sa 3 ocene
	Misa.citanje(); //Čita se sadržaj iz istog binarnog fajla u koji je prethodno upisan "Pera"
	Misa.izbaci(); //Šalje se na ekran

}
Podaci uredno izlaze na ekran, što i očekujem za statičke atribute, ali se uredno izbacuju i ovi iz niza! To me čudi jer njih sam treba zasebno da učitam (što inače nigde nisam implementirao)! Kada se stigne do kraja programa, destruktor se poziva dva puta (za dva objekta), jedan prođe uredno, a kod drugog puca.
 

Top
  Blokirali ste reklame
Dragi prijatelju, nemojte da blokirate reklame - isključite Ad Blocker na Forumu, jer će tako mesto vaših susreta na Krstarici ostati besplatno za korišćenje.