Zapis i odczyt vektora obiektów własnej klasy z dysku
Ostatnio zmodyfikowano 2019-09-02 23:22
Nicander Temat założony przez niniejszego użytkownika |
Zapis i odczyt vektora obiektów własnej klasy z dysku » 2019-09-02 12:30:23 Dzień Dobry, Potrzebuję zrobić program do którego miedzy innymi wprowadzam wielomian do listy wielomianow i zapisuje te dane na dysku w postaci listy wielomianow. Program powinien również móc odczytac te dane z pliku i wyswietlic zawartosc na ekranie. Zastosowałem vektor w ktorym zapisywane są obiekty typu wielomian (klasa wielomian która stworzyłem). Próbowałem użyć biblioteki fstream do zapisu tego vektora w postaci pliku tekstowego. Plik prawdopodobnie się zapisał (gdy w niego wchodze są jakieś chińskie znaczki), ale nie mogę go odczytać. W skrócie: musze zrobic program ktory zapisuje vektor obiektow (kazdy obiekt posiada 6 zmiennych) na dysku i pozniej może go odczytac i wykonywac operacje na obiekcie wybranym z vektora. Jak to można zrobić? Może łatwiej jakims innym sposobem niz biblioteka fstream? To co próbowałem zrobić crashuje program. Kod wygląda następująco: class wielomian { int stopienW; float wspolczynnikiW[ 100 ]; float poczatekPrzedzialu; float koniecPrzedzialu; int iloscIteracji; int q; int p; public: void wprowadz(); int getStopienW(); float getWspolczynnikiW( int i ); float miejsceZerowe(); float getPoczatekPrzedzialu(); float getKoniecPrzedzialu(); int getIloscIteracji(); int getP(); int getQ(); };
#include <iostream> #include <stdio.h> #include "wielomian.h" #include <fstream> #include <vector>
vector < wielomian > listaWielomianow;
using namespace std;
void DodajWielomian() { wielomian wielomianNew; wielomianNew.wprowadz(); }
void Zapis { menu2 = 0; printf( "Zapisuje\n" ); listaWielomianow.push_back( wielomianNew ); fstream plik; plik.open( "ListaWielomianowNowa.txt", ios::out ); plik.write(( char * ) & listaWielomianow[ 0 ], listaWielomianow.size() * sizeof( wielomian ) ); plik.close(); }
void Odczyt() { fstream plik; plik.open( "ListaWIelomianowNowa.txt", ios::in ); int indeks = 0; while( !plik.eof() ) { wielomian OdczytanyWielomian; plik.read(( char * ) & OdczytanyWielomian, sizeof( wielomian ) ); listaWielomianow[ indeks ] = OdczytanyWielomian; indeks++; } for( int i = 0; i < listaWielomianow.size(); i++ ) { cout << i + 1 << ".Wielomian " << endl; cout << "-stopien: " << listaWielomianow[ i ].getStopienW() << endl; for( int s = listaWielomianow[ i ].getStopienW(); s >= 0; s-- ) { cout << "-wsp" << s << ": " << listaWielomianow[ i ].getWspolczynnikiW( s ) << endl; } cout << "-ilosc iteracji: " << listaWielomianow[ i ].getIloscIteracji() << endl; cout << "-poczatek przedzialu: " << listaWielomianow[ i ].getPoczatekPrzedzialu() << endl; cout << "-koniec przedzialu: " << listaWielomianow[ i ].getKoniecPrzedzialu() << endl; cout << "-parametr p: " << listaWielomianow[ i ].getP() << endl; cout << "-parametr q: " << listaWielomianow[ i ].getQ() << endl; cout << endl; } plik.close(); }
|
|
pekfos |
» 2019-09-02 23:22:21 listaWielomianow[ indeks ] = OdczytanyWielomian; indeks++; |
Wektor nie powiększa się sam z siebie, jak podasz za duży indeks. To jest wyjście poza zakres. |
|
« 1 » |