C'è voluto un po', ma alla fine credo di aver capito il problema: Ridichiari sempre registro. In questo modo lo sovrascrivi perdendo le stringhe (non l'oggetto, ma il "valore" ) visto che sono allocate nell'heap al contrario degli int che sono nello stack.
codice:
main (){
...
while(getline (myfile, line)) {
...
Register registro; // Lo dichiari ad ogni ciclo
vettManipClass vettManipObject;
}
...
case 1 : {
Register registro; // Lo ridichiari
registro.print_student(cont);
break; }
case 2 : {
cout << "Insert output file name: "; cin >> out_name;
Register registro; // Lo ridichiari anche qua
registro.print_file(out_name);
break; }
case 3 : {
cout << "Insert name surname grade : ";
cin >> new_name >> new_surname >> voto;
Register registro; // e qui
}
Dichiarali una sola volta all'inizio del main (non dentro un ciclo) e basta.
inoltre , non ti conviene tener traccia del numero degli studenti dentro Register?