Trebalo je vektor napuniti korisnički definisanom klasaom a zatim sve
to upisati u fajl a zatim sve to i pročitati, ali avaj rezultat čitanja iz fajla je potpuno
neočekivan:
Code:
// Binarna klasa koja ide u vektor a zatim u fajl ali sta izlazi iz fajla ???
class binar
{
public:
binar() :_age(0),_name("default") {}
binar(int age) : _age(age),_name("defaut") {}
binar(int age, String name) :_age(age),_name(name) {}
// binar(binar &rhs) ; // ovi su izbaceni namerno
//binar& operator = (binar &rhs);
void setAge(int age) {_age= age;}
void setName (String name) { _name= name; }
bool operator == (binar &rhs);
bool operator < (const binar rhs);
int age() { return _age; }
String name() { return _name; }
private:
int _age;
String _name;
};
//-----------------------------------------------------------
void binar_toFile()
// pravi vektor sa binarnim klasama i upisuje ih u fajl
{
binar *temp;
int i; char s[10];
vector<binar> elemetni;
char c;
while (c!= 'c' )
{
cout<< "Unesi y za podatke za klasu 'binar' karakter 'c' za kraj " << endl;
cin >> c;
if(c== 'c') break;
cout<< " Unesi naziv "<< endl;
cin >> s;
cout<< " Unesi id "<< endl;
cin >> i;
temp= new binar(i,s);
// temp.setAge(i); temp.setName(s);
elemetni.push_back(*temp);
delete temp;
}
cout<<endl<<endl << "vektor elementi napunjen sledi upis u fajl" << endl;
// upis u fajl
ofstream out("Binar.bin", ios::binary|ios::app);
char niz[1000];
if(!out)
{
cerr << "Ne moze da otvori fajl ";
return;
}
for(vector<binar>::size_type i= 0; i< elemetni.size();i++) // ne idemo preko iteratora ...
{
binar temp= elemetni[i];
out.write((char*)&temp,sizeof(temp));
cout << temp.name() << " " << temp.age() << endl; // kontrola
}
out.close();
cout << "------- kraj upisa u fajl ------------------"<< endl;
}
//------------------------------------------------------------
void binar_from_File()
{
// ucitava podatke iz binarnog fajla i prikazuje na std.out
vector <binar> elemetni;
binar temp;
char niz [1000];
int duzina= sizeof(temp);
int i;
ifstream in("Binar.bin", ios::binary);
in.seekg(ios::beg);
do {
in.read(niz, duzina);
i= in.gcount();
binar* t= reinterpret_cast<binar*> ( niz) ;
elemetni.push_back(temp);
}
while( i==duzina);
in.close();
cout<< "Da vidimo sta smo procitali " << endl;
for(vector<binar>::size_type i= 0; i< elemetni.size();i++)
{
temp= elemetni[i];
cout<< temp.age() << " " << temp.name() << endl;
}
}
// ----------------------------------------------------------------
int main (int argc, char **argv) {
binar_toFile() ;
binar_from_File();
// Binarna klasa koja ide u vektor a zatim u fajl ali sta izlazi iz fajla ???
class binar
{
public:
binar() :_age(0),_name("default") {}
binar(int age) : _age(age),_name("defaut") {}
binar(int age, String name) :_age(age),_name(name) {}
// binar(binar &rhs) ; // ovi su izbaceni namerno
//binar& operator = (binar &rhs);
void setAge(int age) {_age= age;}
void setName (String name) { _name= name; }
bool operator == (binar &rhs);
bool operator < (const binar rhs);
int age() { return _age; }
String name() { return _name; }
private:
int _age;
String _name;
};
//-----------------------------------------------------------
void binar_toFile()
// pravi vektor sa binarnim klasama i upisuje ih u fajl
{
binar *temp;
int i; char s[10];
vector<binar> elemetni;
char c;
while (c!= 'c' )
{
cout<< "Unesi y za podatke za klasu 'binar' karakter 'c' za kraj " << endl;
cin >> c;
if(c== 'c') break;
cout<< " Unesi naziv "<< endl;
cin >> s;
cout<< " Unesi id "<< endl;
cin >> i;
temp= new binar(i,s);
// temp.setAge(i); temp.setName(s);
elemetni.push_back(*temp);
delete temp;
}
cout<<endl<<endl << "vektor elementi napunjen sledi upis u fajl" << endl;
// upis u fajl
ofstream out("Binar.bin", ios::binary|ios::app);
char niz[1000];
if(!out)
{
cerr << "Ne moze da otvori fajl ";
return;
}
for(vector<binar>::size_type i= 0; i< elemetni.size();i++) // ne idemo preko iteratora ...
{
binar temp= elemetni[i];
out.write((char*)&temp,sizeof(temp));
cout << temp.name() << " " << temp.age() << endl; // kontrola
}
out.close();
cout << "------- kraj upisa u fajl ------------------"<< endl;
}
//------------------------------------------------------------
void binar_from_File()
{
// ucitava podatke iz binarnog fajla i prikazuje na std.out
vector <binar> elemetni;
binar temp;
char niz [1000];
int duzina= sizeof(temp);
int i;
ifstream in("Binar.bin", ios::binary);
in.seekg(ios::beg);
do {
in.read(niz, duzina);
i= in.gcount();
binar* t= reinterpret_cast<binar*> ( niz) ;
elemetni.push_back(temp);
}
while( i==duzina);
in.close();
cout<< "Da vidimo sta smo procitali " << endl;
for(vector<binar>::size_type i= 0; i< elemetni.size();i++)
{
temp= elemetni[i];
cout<< temp.age() << " " << temp.name() << endl;
}
}
// ----------------------------------------------------------------
int main (int argc, char **argv) {
binar_toFile() ;
binar_from_File();
rezultat izlaza iz fajla su podaci default konstruktora
0 default
0 default itd ???
i kako to ???
Tape loading error