[ Duke Nukem @ 08.10.2005. 11:35 ] @
U šta može da se izrodi trivijalan problem 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(); rezultat izlaza iz fajla su podaci default konstruktora 0 default 0 default itd ??? i kako to ??? |