Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29

Discussione: [C++] classi e STL

  1. #1

    [C++] classi e STL

    cosa c'è di sbagliato in questo programma?
    codice:
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int scelta;
    
    struct data{
    		int gg;
    		int mm;
    		int aa;
    	};
    
    class Paziente
    {
    	string nome;
    	string residenza;
    	struct data nascita;
    	struct data presa_in_carico;
    	
    	public:
    	Paziente(string, string, int, int, int, int, int, int){
    		nome="";
    		residenza="";
    		nascita.gg=0;
    		nascita.mm=0;
    		nascita.aa=0;
    		presa_in_carico.gg=0;
    		presa_in_carico.mm=0;
    		presa_in_carico.aa=0;
    		
    		};
    	void Aggiungi(string, string, int, int, int, int, int, int);
    	void Visualizza();
    	
    	};
    
    void Paziente::Aggiungi(string name, string city, int g, int m, int a, int gp, int mp, int ap){
    	
    	 nome=name;
    	 residenza=city;
    	 nascita.gg=g;
    	 nascita.mm=m;
    	 nascita.aa=a;
    	 presa_in_carico.gg=gp;
    	 presa_in_carico.mm=mp;
    	 presa_in_carico.aa=ap;
    	
    	};
    	
    void Paziente::Visualizza(){
    	
    	cout << nome<<endl;
    	cout << residenza<<endl;
    	cout << nascita.gg << "/" << nascita.mm << "/" << nascita.aa<<endl;
    	cout << presa_in_carico.gg << "/" <<  presa_in_carico.mm << "/" <<  presa_in_carico.aa<<endl;
    	
    	};
    	
    void menu(){
    		
    	cout << endl;
    	cout << "1. Aggiungi Paziente" << endl;
    //	cout << "2. Elimina Paziente" << endl;
    	cout << "3. Visualizza tutti i pazienti" << endl;
    	cout << "4. Esci" << endl;
    	cout << endl;
    
    	cout << "Scelta : ";
    	cin >> scelta;
    	};
    
    
    int main(int argc, char** argv)
    {
    	vector<Paziente> assistito;
    	string name;
    	string city;
    	int g, m, a;
    	int gp, mp, ap;
    	int i, dim;
    	
    	
    	do{
    		cout << "\nSeleziona una voce\n";
    		menu();	
    	
    	switch(scelta){
    		case 1:
    				i++;
    				
    				cout<<"Inserisci Nome: ";
    				cin>>name;
    				cout<<"Inserisci Residenza: ";
    				cin>>city;
    	
    				cout<<"Inserisci Giorno Nascita: ";
    				cin>>g;
    				cout<<"Inserisci mese Nascita: ";
    				cin>>m;
    				cout<<"Inserisci anno Nascita: ";
    				cin>>a;
    	
    				cout<<"Inserisci Giorno Presa in carico: ";
    				cin>>gp;
    				cout<<"Inserisci mese Presa in carico: ";
    				cin>>mp;
    				cout<<"Inserisci anno Presa in carico: ";
    				cin>>ap;
    				
    				assistito[i].Aggiungi(name, city, g, m, a, gp, mp, ap);
    				
    				break;
    /*		case 2:
    				assistito.Elimina();
    				break;
    */
    		case 3:	
    				dim=assistito.size();
    				for (i = 0; i != dim; i++) {
    					assistito[i].Visualizza();
    					}
    				break;
    		case 4:
    				break;
    			}
    		}while(scelta!=4);
    
    	
    	return 0;
    }
    il metodo Elimina non l'ho ancora sviluppato

  2. #2
    Utente di HTML.it L'avatar di Metflar
    Registrato dal
    Apr 2007
    Messaggi
    790
    se non dici l'errore
    conoscenze: C/C++, Java, PHP, Python
    [No PM tecnici o di qualsiasi genere]

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    sicuro sia ammesso quel costruttore così dichiarato? ho dei dubbi

  4. #4
    uso Geany IDE per linux con compilatore gcc.

    non mi da errori in compilazione ma quando eseguo il programma, dopo aver chiamato il metodo Aggiungi(), mi dice Segmentation Fault.

  5. #5
    il dubbio che ho io, è se sia ammesso questo:

    codice:
    				assistito[i].Aggiungi(name, city, g, m, a, gp, mp, ap);
    cioè il VECTOR "assistito" di tipo "Paziente" posso chiamarlo in una data posizione con una variabile intera "i" anche se è dinamico?

    e a sua volta VECTOR "assistito" può chiamare il metodo della classe Paziente?

    forse è qui l'errore... logico e non di sintassi a questo punto... credo.

  6. #6
    Originariamente inviato da Stoicenko
    sicuro sia ammesso quel costruttore così dichiarato? ho dei dubbi
    non sono sicuro al 100% perchè cmq in fase di esecuzione qualcosa non funziona... vorrei proprio sapere dove sta l'inghippo

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    il problema è che il vector è vuoto!!!

    non basta dichiararlo.. bisogna anche aggiungere dei valori (pazionte nel tuo caso)

    studia la doc del vector per capire come si usa

  8. #8
    effettivamente, lo so che in teoria, dovrei aggiungere i valori al VECTOR con "push_back()"

    se volessi fare una cosa del genere nel mio caso è impossibile perchè dovrei crearmi delle classi in run time, in modo da swapparle in una variabile e passare la variabile a VECTOR.push_back(variabile da passare), ma non posso farne l'istanza della classe in run time...

    sapreste suggerirmi un modo?

    perchè ho provato anche con un vettore normale, ma il problema è lo stesso

    codice:
    include <iostream>
    #include <string>
    using namespace std;
    
    int scelta;
    
    struct data{
    		int gg;
    		int mm;
    		int aa;
    	};
    
    class Paziente
    {
    	string nome;
    	string residenza;
    	struct data nascita;
    	struct data presa_in_carico;
    	
    	public:
    	Paziente(){
    		nome="asd";
    		residenza="asd";
    		nascita.gg=0;
    		nascita.mm=0;
    		nascita.aa=0;
    		presa_in_carico.gg=0;
    		presa_in_carico.mm=0;
    		presa_in_carico.aa=0;
    		
    		}
    	void Aggiungi(string, string, int, int, int, int, int, int);
    	void Visualizza();
    	
    	};
    
    void Paziente::Aggiungi(string name, string city, int g, int m, int a, int gp, int mp, int ap){
    	
    	 nome=name;
    	 residenza=city;
    	 nascita.gg=g;
    	 nascita.mm=m;
    	 nascita.aa=a;
    	 presa_in_carico.gg=gp;
    	 presa_in_carico.mm=mp;
    	 presa_in_carico.aa=ap;
    	
    	}
    	
    void Paziente::Visualizza(){
    	
    	cout << nome<<endl;
    	cout << residenza<<endl;
    	cout << nascita.gg << "/" << nascita.mm << "/" << nascita.aa<<endl;
    	cout << presa_in_carico.gg << "/" <<  presa_in_carico.mm << "/" <<  presa_in_carico.aa<<endl;
    	
    	}
    	
    void menu(){
    		
    	cout << endl;
    	cout << "1. Aggiungi Paziente" << endl;
    //	cout << "2. Elimina Paziente" << endl;
    	cout << "3. Visualizza tutti i pazienti" << endl;
    	cout << "4. Esci" << endl;
    	cout << endl;
    
    	cout << "Scelta : ";
    	cin >> scelta;
    	}
    
    
    int main()
    {
    	Paziente vettore[10];
    	string name;
    	string city;
    	int g, m, a;
    	int gp, mp, ap;
    	int i;
    	
    
    	do{
    		cout << "\nSeleziona una voce\n";
    		menu();	
    		
    	switch(scelta){
    		case 1:
    				i++;
    				
    				cout<<"Inserisci Nome: ";
    				cin>>name;
    				cout<<"Inserisci Residenza: ";
    				cin>>city;
    	
    				cout<<"Inserisci Giorno Nascita: ";
    				cin>>g;
    				cout<<"Inserisci mese Nascita: ";
    				cin>>m;
    				cout<<"Inserisci anno Nascita: ";
    				cin>>a;
    	
    				cout<<"Inserisci Giorno Presa in carico: ";
    				cin>>gp;
    				cout<<"Inserisci mese Presa in carico: ";
    				cin>>mp;
    				cout<<"Inserisci anno Presa in carico: ";
    				cin>>ap;
    				
    				vettore[i].Aggiungi(name, city, g, m, a, gp, mp, ap);
    				
    				break;
    /*		case 2:
    				assistito.Elimina();
    				break;
    */
    		case 3:	
    				for (i=0; i<10; i++) {
    					vettore[i].Visualizza();
    					}
    				break;
    		case 4:
    				cout << "Arrivederci e Grazie!";
    				break;
    			}// fine switch
    	}while(scelta!=4);
    	//fine do while
    	
    
    	
    	return 0;
    }
    mi dice sempre dopo aver aggiunto la prima serie di valori, ovvero:
    Nome:
    città:
    giorno:...
    etcc...

    mi dice Segmantation Fault.


  9. #9
    codice:
    vector<Paziente> assistito;
    ha ZERO elementi. Quindi quando accedi all'elemento i-esimo giustamente va in crash.
    Tra l'altro a variabile i ha un contenuto indefinito a meno che non venga scelta' opzione 3 del tuo menu.

    E compilando il tuo codice originale:
    codice:
    $ g++ -Wall -ansi -pedantic -Wextra -Wconversion -g main.cpp 
    main.cpp:49: error: extra ';'
    main.cpp:58: error: extra ';'
    main.cpp:71: error: extra ';'
    main.cpp:74: warning: unused parameter 'argc'
    main.cpp:74: warning: unused parameter 'argv'

  10. #10
    ok grazie mille, per i ";" lo ho visto dopo infatti gli ho tolti... adesso ho questo codice:

    codice:
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int scelta;
    
    struct data{
    		int gg;
    		int mm;
    		int aa;
    	};
    
    class Paziente
    {
    	string nome;
    	string residenza;
    	struct data nascita;
    	struct data presa_in_carico;
    	
    	public:
    	Paziente(string, string, int, int, int, int, int, int){
    		nome="";
    		residenza="";
    		nascita.gg=0;
    		nascita.mm=0;
    		nascita.aa=0;
    		presa_in_carico.gg=0;
    		presa_in_carico.mm=0;
    		presa_in_carico.aa=0;
    		
    		}
    	void Aggiungi(string, string, int, int, int, int, int, int);
    	void Visualizza();
    	
    	};
    
    void Paziente::Aggiungi(string name, string city, int g, int m, int a, int gp, int mp, int ap){
    	
    	 nome=name;
    	 residenza=city;
    	 nascita.gg=g;
    	 nascita.mm=m;
    	 nascita.aa=a;
    	 presa_in_carico.gg=gp;
    	 presa_in_carico.mm=mp;
    	 presa_in_carico.aa=ap;
    	
    	}
    	
    void Paziente::Visualizza(){
    	
    	cout << nome<<endl;
    	cout << residenza<<endl;
    	cout << nascita.gg << "/" << nascita.mm << "/" << nascita.aa<<endl;
    	cout << presa_in_carico.gg << "/" <<  presa_in_carico.mm << "/" <<  presa_in_carico.aa<<endl;
    	
    	}
    	
    void menu(){
    		
    	cout << endl;
    	cout << "1. Aggiungi Paziente" << endl;
    //	cout << "2. Elimina Paziente" << endl;
    	cout << "3. Visualizza tutti i pazienti" << endl;
    	cout << "4. Esci" << endl;
    	cout << endl;
    
    	cout << "Scelta : ";
    	cin >> scelta;
    	}
    
    
    int main()
    {
    	vector<Paziente> assistito;
    	string name;
    	string city;
    	int g, m, a;
    	int gp, mp, ap;
    	int i, dim;
    	
    	
    	do{
    		cout << "\nSeleziona una voce\n";
    		menu();	
    	
    	switch(scelta){
    		case 1:
    				i++;
    				
    				cout<<"Inserisci Nome: ";
    				cin>>name;
    				cout<<"Inserisci Residenza: ";
    				cin>>city;
    	
    				cout<<"Inserisci Giorno Nascita: ";
    				cin>>g;
    				cout<<"Inserisci mese Nascita: ";
    				cin>>m;
    				cout<<"Inserisci anno Nascita: ";
    				cin>>a;
    	
    				cout<<"Inserisci Giorno Presa in carico: ";
    				cin>>gp;
    				cout<<"Inserisci mese Presa in carico: ";
    				cin>>mp;
    				cout<<"Inserisci anno Presa in carico: ";
    				cin>>ap;
    				
    				assistito[i].Aggiungi(name, city, g, m, a, gp, mp, ap);
    				
    				break;
    /*		case 2:
    				assistito.Elimina();
    				break;
    */
    		case 3:	
    				dim=assistito.size();
    				for (i = 0; i<dim; i++) {
    					assistito[i].Visualizza();
    					}
    				break;
    		case 4:
    				cout << "Arrivederci e Grazie!";
    				break;
    			}
    		}while(scelta!=4);
    
    	
    	return 0;
    }
    io sapevo che se dichiaro un VECTOR senza dare dimensione questo è automaticamente allocato dinamicamente, per questo pensavo di potr fare così.

    allora stabilito che vorrei allocare questo "vector<Paziente> assistito" dinamicamente e vorrei aggiungere uno la volta i campi di "assistito" proprio grazie alla voce del menu "1" come posso fare?

    e come faccio poi a fargli stampare tutto il contenuto di "assistito"?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.