Errore nella creazione di un vector

di il
10 risposte

Errore nella creazione di un vector

#include <fstream>
#include <sstream>
#include <vector>
#include <iterator>
#include "esame.h"

using namespace std;

int main(int argc, char** argv) {
fstream myFile;
string stringa,nome;
stringstream ss;
esame *ex= new esame;
int count=0,crediti,voto;
vector <esame> esami;
vector <esame>:: iterator it;
myFile.open("testFile");
myFile.seekp (myFile.beg);

while(getline(myFile,stringa,'\t')){
stringstream ss(stringa);
if(count==0){
ss>>crediti;
} else if(count==1){
ss>>voto;
} else{
ex->setVoto(voto);
ex->setCrediti(crediti);
ex->setNome(stringa);
esami.push_back(*ex);
count=-1;
}
ss.clear();
count++;
}

for( it= esami.begin(); it!=esami.end() ; it++ ){

cout<<it->getCrediti()<<" "<<it->getNome()<<" "<<it->getVoto()<<endl;
}

return 0;
}


questo codice non mi da errori. Il problema sta nel fatto che riesco a creare gli oggetti di tipo "esame" e a settarli nel modo giusto (ho verificato tramite stampa su schermo) ma salvandoli nella lista succede qualcosa. Infatti quando stampo la lista tramite l'ultimo ciclo for ottengo che gli oggetti salvati in essa sono tutti inizializzati a 0.

10 Risposte

  • Re: Errore nella creazione di un vector

    Hai fatto un po' di debugging?

    Ci spieghi come funziona questo

    count

    all'interno del ciclo di lettura?

    P.S. Devi usare i tag CODE per postare il codice nel forum e indentarlo correttamente, altrimenti non si capisce nulla.
  • Re: Errore nella creazione di un vector

    
    #include <fstream>
    #include <sstream>
    #include <vector>
    #include <iterator>
    #include "esame.h"
    
    using namespace std;
    
    int main(int argc, char** argv) {
    fstream myFile;
    string stringa,nome;
    stringstream ss;
    esame *ex= new esame;
    int count=0,crediti,voto;
    vector <esame> esami;
    vector <esame>:: iterator it;
    myFile.open("testFile");
    myFile.seekp (myFile.beg);
    
    while(getline(myFile,stringa,'\t')){
         stringstream ss(stringa);
        if(count==0){
            ss>>crediti; 
        } else if(count==1){
            ss>>voto; 
        } else{
            ex->setVoto(voto);
            ex->setCrediti(crediti);
            ex->setNome(stringa);
            esami.push_back(*ex); 
            count=-1; 
        }
        ss.clear();
        count++;
    } 
    
    for( it= esami.begin(); it!=esami.end() ; it++ )
         cout<<it->getCrediti()<<" "<<it->getNome()<<" "<<it->getVoto()<<endl;
    
    
    return 0;
    la cout semplicemente stampa su schermo.
  • Re: Errore nella creazione di un vector

    Count non cout !
  • Re: Errore nella creazione di un vector

    Scusami, ho letto velocemente.
    In pratica l'oggetto esame contiene: voto, crediti e nome; con il programma leggo da un file che rappresenta una sorta di "libretto" e vado a creare i vari oggetti "esame£ che rappresentano appunto l'esame che si va a leggere da file. Il count l'ho messo preché durante la lettura si legge (in ordine) crediti poi voto ed infine nome, in questo modo vado a salvare al posto giusto ogni dato letto dal file.
  • Re: Errore nella creazione di un vector

    Ho fatto un po' di debugging ma non riesco a capire. Ho provato a stampare a schermo l'oggetto ex prima che questo venga introdotto nel vector "esami" tramite la funzione push_back ed in pratica l'oggetto contiene tutti i dati. Quando però vado a stampare il vector mi accorgo che questo ha il numero di elementi giusto ma gli oggetti contenuti hanno tutti parametri di default.
  • Re: Errore nella creazione di un vector

    Sicuro che funzioni bene? Controlla bene
  • Re: Errore nella creazione di un vector

    Sicuro
  • Re: Errore nella creazione di un vector

    Il file dati come è fatto?

    Guarda che da

    esami.push_back(*ex);

    non ci passa mai il programma ... rivedi il funzionamento del tuo codice e questo count che non fa quello che pensi.
  • Re: Errore nella creazione di un vector

    Per il push_back ci passa, avevo messo dei cout per stampare a schermo i parametri dell'oggetto ex e li stampava. la linea di codice del push_back è immediatamente sotto quindi per quel punto ci passa. infatti vengono creati (nella lista) lo stesso numero di oggetti che ho nel file.
    il file ha salvato tutto su una linea e ogni dato è separato da un tab.

    esempio:

    10 20 proframmazione1 8 30 analisi1 e via così
  • Re: Errore nella creazione di un vector

    Con questo tipo di file il codice lavora. Sicuro che ci siano i tab nel tuo file e non semplici spazi? Facci scaricare il file dati su cui lavori.

    Inoltre mostra il codice della classe.
Devi accedere o registrarti per scrivere nel forum
10 risposte