Passare stream a funzione

di il
30 risposte

30 Risposte - Pagina 2

  • Re: Passare stream a funzione

    Bassta che non lo chiammi setter
    A parte gli scherzi io creerei una classe Citta così
    
    class Citta{
       Citta(const string & nome = "",const string & provincia = "")
         : nome_citta(nome) , nome_provincia(provincia){};
       Citta(istream & is)
       {
           is >> nome_citta >> nome_provincia;
       }
       private:
          string nome_citta;
          string nome_provincia;
          unsigned int n_abitanti;//(facoltativo)
          vector<string> att_tur;
    };
    
    Almeno come costruttore accetti già due parametri di tipo string in un modo e un istream in un altro.
    Così siamo contenti tutti e due
  • Re: Passare stream a funzione

    Si mi starebbe bene ... (sono assillante,lo so XD) però voglio capire al meglio le cose e tra queste scegliere la più opportuna.

    Dichiarando due costruttori,ne userei sempre e solo uno o sbaglio?
    Perchè o dichiaro delle variabili temporanee o passo lo stream come parametri.

    Ritornando al codice,
    se scrivo una cosa del genere :
    
    class Archivio{
    string nome,provincia;
    int n;
    vector<string>attrazioni;
    };
    
    Archivio::immissione(){
    cout<<nome<<provincia<<endl;
    cin>>nome>>provincia;
    cout<<abitanti<<endl;
    cin>>n;
    
    poi dovrei fare così:
    
    Citta temp(nome,provincia,n);
    giusto?
    
  • Re: Passare stream a funzione

    Si una cosa del genere può andare
  • Re: Passare stream a funzione

    Grazie ... ora ti vorrei chiedere un'altra cosa senza aprire un nuovo post visto che si attiene al titolo di questo.
    Ritornando al codice "vecchio" ...
    
    void Citta::setcitta(istream& c){ getline(c,nome_citta,'\n'); }
    
    ora questa funzione qui funziona fin quando le passo "cin" ... nel momento in cui le vado a passare un file,così :
    
    file_lettura.open("dati.txt");
    ...
    poi ho:
    elencocitta[j].setcitta(file_lettura);
    
    non dovrebbe funzionare lo stesso,prendendo la prima stringa nel file fino ad a capo e buttarla dentro nome_citta?! o.O
    non mi funziona ... o sbaglio qualcosa sulla getline?
    Grazie ancora!
  • Re: Passare stream a funzione

    Come definito file_lettura? sei sicuro che il file è stato aperto? come sono i campi dentro il file?
  • Re: Passare stream a funzione

    Scusa se rispondo in ritardo ... ma sono tutto il giorno all'uni.

    Allora io ho il mio file dati.txt così :
    
    parma
    	pr
    	23
    	duomo
    	battistero
    ...
    milano
    	mi
    	32
    	duomo
    	san siro
    ...
    
    questo diciamo che è il mio costruttore di classe :
    
    Archivio(){ 
    			file_lettura.open("dati.txt");
    				if(file_lettura.fail()){
    					cout<<"Non è stato trovato nessun file,da cui caricare l'archivio"<<endl;
    					immissione();
    				}else{
    					Citta temp;
    					string att;
    							if(file_lettura.eof()){
    									cout<<"File vuoto"<<endl;
    							}else{
    									while(!file_lettura.eof()){
    										temp.setcitta(file_lettura);
    										temp.setprovincia(file_lettura);
    										temp.setabitanti(file_lettura);
    										cout<<"ingresso nel do"<<endl;
    										file_lettura>>att;
    										while(true){	
    											if(att=="...") break;
    											cout<<"ingresso nel while"<<endl;
    											temp.setatt(att);
    											file_lettura>>att;
    										}
    										elencocitta.push_back(temp);
    									}	
    							}	
    					cout<<"File Caricati"<<endl;
    				}
    		}
    
    queste sono le set
    
    
    void Citta::setcitta(istream& c){ getline(c,nome_citta,'\n'); }
    void Citta::setprovincia(istream& p){ 
    		p>>provincia;
    	}
    int Citta::setatt(string a){
    			int n=0;
    			if(count <= 9){
    				att_tur.push_back(a);
    				n = att_tur.size();
    				return n; //ritorna il numero di attrazioni inserite
    				}else{ 
    					cout<<"Non è possibile inserire più di 10 attrazioni"<<endl;
    					return n;	
    				}
    			
    		 }
    
    entro in un ciclo infinito e non so come uscirne!!
    Grazie skynet!
  • Re: Passare stream a funzione

    Dimenticavo il file_lettura è dichiarato ifstream ...
  • Re: Passare stream a funzione

    Risolto!
  • Re: Passare stream a funzione

    Scusami se non ti ho risposto, non ho avuto tempo neanche per aprire il PC
  • Re: Passare stream a funzione

    Tranqui! tra una cosa e l'altra anch'io ho poco tempo in questi giorni ... visto che il post non è stato chiuso ... continuo a chiedere!! hehe
    Allora in questo benedetto progetto ora devo gestire una "mappa",ho delle città,l'utente può inserire sia un'altra citta che un collegamento citta partenza - citta destinazione .
    Io vorrei farlo con le matrici o meglio vector di vector,che ne dici?
  • Re: Passare stream a funzione

    Spiegati meglio. Io una mappa lo farei così: Creerei una strttura che mi tiene il puntatore alla città destinazione e la distanza tra le due città. Poi nella classe inserirei un vettore che contiene queste strutture. Almeno che i requisiti fossero diversi
  • Re: Passare stream a funzione

    Mi spiego meglio ... allora devo creare una mappa,l'ho pensata così:
    Ho un vector con tutte le citta dentro.
    Quindi vorrei creare una matrice [n][n] con gli indici mantengo la relazione con il vector quindi so a che città mi riferisco e nei campi della matrice invece di mettere a 0 o a 1,se ci sono i collegamenti all'interno della cella metto il numero di kilometri altrimenti 0.
    Non so che ne dici?
    O mi consigli le liste?
    Ho poco chiaro questo problema!
  • Re: Passare stream a funzione

    Ti conviene usare le liste. i vettori perdono i riferimenti degli iterator una volta inserito o tolto un elemento.
  • Re: Passare stream a funzione

    Sapresti darmi qualche manuale fatto bene sulle liste di adiacenze ... non mi sono molto chiare!
  • Re: Passare stream a funzione

    Allora problema... sto usando la classe list della libreria Stl del cpp.
    Il mio problema è che io ho una Classe Collegamento e i campi sono un int e una stringa.
    Poi ho una classe Nodo ... dove all'interno ho una stringa e una list<Collegamento> infine ho una classe Mappa che contiene un vector<Nodi> come faccio a far stampare su file tutti i valori dei collegamenti che sono nella lista da dentro mappa? considerando che gli attributi sono privati?
Devi accedere o registrarti per scrivere nel forum
30 risposte