Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis i odczyt vektora obiektów własnej klasy z dysku

Ostatnio zmodyfikowano 2019-09-02 23:22
Autor Wiadomość
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:

C/C++
class wielomian {
   
   
    int stopienW;
   
    float wspolczynnikiW[ 100 ];
   
    float poczatekPrzedzialu;
   
    float koniecPrzedzialu;
   
    int iloscIteracji;
   
    int q; //parametry do Shaw-Trauba
    int p;
   
public:
   
    void wprowadz();
   
    int getStopienW();
   
    float getWspolczynnikiW( int i );
   
    float miejsceZerowe();
   
    float getPoczatekPrzedzialu();
   
    float getKoniecPrzedzialu();
   
    int getIloscIteracji();
   
    int getP();
   
    int getQ();
};

C/C++
#include <iostream>
#include <stdio.h>
#include "wielomian.h"
#include <fstream>
#include <vector>

vector < wielomian > listaWielomianow;

using namespace std;

void DodajWielomian()
{
    wielomian wielomianNew;
    wielomianNew.wprowadz(); //wprowadza parametry wielomianu
}



void Zapis
{
    menu2 = 0;
    printf( "Zapisuje\n" );
    listaWielomianow.push_back( wielomianNew ); //dodaje do listy nowy wielomian
    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-- ) { //petla do wyswietlania kolejnych wspolczynnikow
           
            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();
   
}
P-175158
pekfos
» 2019-09-02 23:22:21
C/C++
listaWielomianow[ indeks ] = OdczytanyWielomian;
indeks++;
Wektor nie powiększa się sam z siebie, jak podasz za duży indeks. To jest wyjście poza zakres.
P-175160
« 1 »
  Strona 1 z 1