nicolas_cof, tenes razón que un public al principio seria suficiente, pero algunos utilizan los modificadores además como separador entre los data members y los métodos, una forma de dejar la declaración de la clase un poco más legible.
M3LiNdR1, que no sea private no quiere decir que esté mal, el código va a compilar y va a funcionar como espera, pero corre el riesgo de tener esas propiedades expuestas y que luego en caso de error sea complejo encontrar la falla.
juni85, tu error esta en el método cambiar_nombre() :
void cambiar_nombre(){
string nom,nuevo;
Empleado pa;
//Empleado *pa;
int em;
cout<<"Introduce el nombre del empleado a cambiar "<<endl;
getline(cin,nom);
em=BuscarEmpleado(nom);
if(em==-1)cout<<"Nombre no valido "<<endl;
else{
cout<<"Introduce el nuevo nombre "<<endl;
getline(cin,nuevo);
pa.set_nombre(nuevo);
//pa->set.nombre(nuevo);---el compilador se queda pillado
}
Estás llamando a set_nombre() a un objeto creado solo en este método que no apunta a ninguno de los elementos del vector de Empleados. Lo que yo haría sería crear una referencia hacia el empleado que se está buscando y cambiarle el nombre :
void cambiar_nombre(){
string nom,nuevo;
int em;
cout<<"Introduce el nombre del empleado a cambiar "<<endl;
getline(cin,nom);
// Busca al empleado en el vector por el nombre
int indiceEmpleado;
for( indiceEmpleado = 0; indiceEmpleado < v.size(); indiceEmpleado++ ){
if( v[indiceEmpleado].get_nombre() == nom )
break;
}
// Si el indice encontrado es igual al tamaño del vector, el nombre no fue encontrado
if( indiceEmpleado == v.size() ){
cout<<"Nombre no valido "<<endl;
}
else{
// Creo la referencia al empleado encontrado para poder trabajar en ese elemento
Empleado & pa = v[indiceEmpleado];
cout<<"Introduce el nuevo nombre "<<endl;
getline(cin,nuevo);
pa.set_nombre(nuevo);
}
}
De paso, echale una mirada a BuscarEmpleado() que tiene errores.
Saludos.