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