[ Kurt2 @ 04.01.2006. 13:53 ] @
Imam klasu "Osnovna" sa nekim jednostavnim f-jama. U h fajlu mislim da nema problema. Grešku mi prijavljuje u glavnom programu. Nešto nisam uradio dobro. Šta?
[ NastyBoy @ 04.01.2006. 14:23 ] @
1. Implementiraj destruktor
2. #include <iostream> u osnovna.h
3. osnovna.cpp fajl ti ne treba, templejt je u pitanju
4. U glavni.cpp : Osnovna<int,5> Pera; // bez zagrade

[ Kurt2 @ 04.01.2006. 14:46 ] @
Za iostream sam totalno zaboravio, sa osnovna.cpp nema problema, može da postoji iako je prazan, destruktoru je samo falilo " { } " bez ikakvog koda unutra, za "Pera()" je glupo što bez zagrada radi, a sa zagradama neće, ali dobro...
Hvala!!!
[ Branimir Maksimovic @ 06.01.2006. 09:12 ] @
Citat:
Kurt2: Za iostream sam totalno zaboravio, sa osnovna.cpp nema problema, može da postoji iako je prazan, destruktoru je samo falilo " { } " bez ikakvog koda unutra, za "Pera()" je glupo što bez zagrada radi, a sa zagradama neće, ali dobro...
Hvala!!!


Osnovna<int,5> Pera();
je deklaracija funkcije "Pera" koja nema argumenata i vraca Osnovna<int,5>

Pozdrav!
[ Kurt2 @ 06.01.2006. 15:50 ] @
@Branimir: Hvala, to nisam znao!

Da ne otvaram novu temu, evo još jednog problema:
Imam klasu Student, njoj neke privatne atribute i dinamički niz sa ocenama. Kako to zapisati u binarni fajl? Ustvari, ja znam kako, ali se javlja problem sa destruktorom. U glavnom programu pravim jedan objekat (Pera, uzeo sam testa radi da dinamički niz ima 3 ocene), onda to zapišem u fajl, pa onda fajl iščitam ali ovaj put iz objekta Misa, pre čemu to sve lepo radi, ali na kraju destruktor ne završi posao sa "Misom" kako treba! Tu grešim sa pokazivačem na niz, ali ne znam baš kako.
I još nešto: da li je moguće da pri debagiranju u visual c-u isključim da mi stalno iskače disassembly prozor?
[ Branimir Maksimovic @ 06.01.2006. 22:33 ] @
Citat:
Kurt2: @Branimir: Hvala, to nisam znao!

Da ne otvaram novu temu, evo još jednog problema:
Imam klasu Student, njoj neke privatne atribute i dinamički niz sa ocenama. Kako to zapisati u binarni fajl? Ustvari, ja znam kako, ali se javlja problem sa destruktorom. U glavnom programu pravim jedan objekat (Pera, uzeo sam testa radi da dinamički niz ima 3 ocene), onda to zapišem u fajl, pa onda fajl iščitam ali ovaj put iz objekta Misa, pre čemu to sve lepo radi, ali na kraju destruktor ne završi posao sa "Misom" kako treba! Tu grešim sa pokazivačem na niz, ali ne znam baš kako.
I još nešto: da li je moguće da pri debagiranju u visual c-u isključim da mi stalno iskače disassembly prozor?


Ne mozes binarno citati/pisati u jednom cugu pogotovo sto imas pointere
u klasi. Znaci u slucaju virtuelnog nasledjivanja ili virtuelne funkcije ili
kad imas pointer kao clan, binarno moras da serijalizujes element po element zato
sto u klasi postoje run time podaci koje nema smisla snimati ili ucitavati.

Pozdrav!

[ Kurt2 @ 06.01.2006. 23:15 ] @
OK, jel ima ovo smisla:


Code:

void Student::upis()
{
    ofstream os("podaci.dat", ios::binary); //pisanje u "podaci.dat"
    os.write((char*) this, sizeof(Student)); //upisujem statiče podatke (ili ne?)
    for (int i=0; i<3; i++)
          os.write((char*) &ocene[i], sizeof(int)); //upisujem jedan po jedan integer iz dinamičkog niza
    os.close();
}
[ Goran Arandjelovic @ 07.01.2006. 18:09 ] @
Pogledaj Student.h: Neko je to već napomenuo čini mi se... imaš int *ocene; šta misliš da se sa tim dešava? Sa tom funkcijom nećeš upisati ceo niz već samo vrednost tog pokazivača.
[ Branimir Maksimovic @ 08.01.2006. 11:24 ] @
Citat:
Kurt2: OK, jel ima ovo smisla:


Code:

void Student::upis()
{
ofstream os("podaci.dat", ios::binary); //pisanje u "podaci.dat"
os.write((char*) this, sizeof(Student)); //upisujem statiče podatke (ili ne?)
for (int i=0; i<3; i++)
      os.write((char*) &ocene[i], sizeof(int)); //upisujem jedan po jedan integer iz dinamičkog niza
os.close();
}


Ne mozes upisati ceo Student, moras redom 1 po jedno polje izuzev pokazivaca.
Kako pisanje, tako i citanje.

Pozdrav!
[ Goran Arandjelovic @ 08.01.2006. 18:45 ] @
Ne mora sve podatke posebno... Ovo je validan kod i potpuno funkcionalan, zar ne?

Code:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class Klasa
{
    public:
    int x;
    string s;
    char n;
};


int main(int argc, char *argv[])
{
    Klasa a;
    Klasa p;
    
    a.x = 5;
    a.s = "Goranche";
    a.n = 'N';
    
    fstream file("out",ios::out|ios::binary);
    file.write((char*)&a,sizeof(a));
    file.close();
    
    file.open("out",ios::in|ios::binary);
    file.read((char*)&p,sizeof(p));
    file.close();
    
    cout << p.x;
    cout << a.s;
    cout << a.n;
}


Što će reći, možeš upisivati ceo objekat odjednom, ali pazi! Ali ćeš vratiti nazad samo one podatke koji su bili na steku.

[Ovu poruku je menjao Goran Arandjelovic dana 08.01.2006. u 19:46 GMT+1]
[ Branimir Maksimovic @ 09.01.2006. 01:44 ] @
Citat:
Goran Arandjelovic: Ne mora sve podatke posebno... Ovo je validan kod i potpuno funkcionalan, zar ne? :)

Code:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

class Klasa
{
    public:
int x;
string s;
char n;
};


int main(int argc, char *argv[])
{
    Klasa a;
    Klasa p;
    
    a.x = 5;
    a.s = "Goranche";
    a.n = 'N';
    
    fstream file("out",ios::out|ios::binary);
    file.write((char*)&a,sizeof(a));
    file.close();
    
    file.open("out",ios::in|ios::binary);
    file.read((char*)&p,sizeof(p));
    file.close();
    
    cout << p.x;
    cout << a.s;
    cout << a.n;
}


Što će reći, možeš upisivati ceo objekat odjednom, ali pazi! Ali ćeš vratiti nazad samo one podatke koji su bili na steku.

[Ovu poruku je menjao Goran Arandjelovic dana 08.01.2006. u 19:46 GMT+1]


Niti je validan niti funkcionalan.
dodaj recimo izmedju write/a i read/a a.s.resize(100); ili a.s+="Tamara";
ili bilo sta sto ce naterati string da realocira i tvoj program onda ima
undefined behavior. Sto se tice steka, isto ti je, string alocira uvek
na heapu, osim ako nije SSO recimo flex_string al i on alocira
na heapu preko 16 karaktera:)
Write cele strukture je garantovan da radi samo ako struktura
sadrzi POD-ove i nista drugo, sto ce reci, ako tvoj string ima pokazivac,
kao sto ima, to ne radi jer sadrzaj stringa nece biti snimljen
nego pointer.

Pozdrav!
[ Goran Arandjelovic @ 09.01.2006. 10:23 ] @
U pravu si. I malo pre sam sam rekao za pokazivače, a mahinalno sam stavio string...