El problema viene de concepto.
¿Qué hace la clase vector? Cosas similares a un array (no me matéis, es para explicar unas cosas).
¿Qué hace un array? En plan bestia, podríamos decir que coge un puñado de datos que son del mismo tipo y los pone uno tras otro en memoria de forma que podamos acceder a ellos como si fueran variables normales o usarlas como una cadena de datos.
¿Qué es una clase? Con la ayuda de tipos básicos, creamos un nuevo tipo de dato.
Teniendo lo anterior en cuenta:
Profesor es una clase. Tu crearás objetos de la clase profesor. Cada uno tendrá los atributos que has puesto (nombre, edad, telefono...). Los atributos son el mismo tipo de dato, pero cada profesor será independiente uno de otro ya que el estado de cada profesor, es decir, el valor de sus variables de instancia, será distinto.
Pensemos por un momento: ¿cómo declaramos cada una se esas variables? Analicemos qué es cada una de las variables:
nombre: podría ser un string, por que es un tipo de dato adecuado para ello.
telefono: es un numero entero (un int)
edad: otro número entero (int)
¿Para alguno de esos nos hacía falta un vector? NO. ¿Cuántos nombres, teléfonos o edades va a tener un profesor? Solo una. La clase vector se utiliza, como los array, cuando tenemos más de un elemento de un tipo.
Quieres añadir que cada profesor tenga un conjunto de alumnos asignados. ¿Alumnos es un conjunto, es decir, son más de uno? Sí. Por tanto, usa la clase vector, añadiendo una nueva variable a tu clase Profesor. Quedaría entonces así:
Código C++:
Ver originalclass profesor{
protected:
string nombre;
int edad;
int telefono;
vector <Alumno> misalumnos;
}
Ahora, haz métodos modificadores y consultores. Esos métodos permitirán que, por ejemplo desde el main, se pueda acceder a las variables de instancia, para cambiarlas o consultarlas.
Saca el método crear_profesor de la clase (ponlo en un archivo que no tenga que ver con la clase) y haz que te genere un profesor y lo añada al vector y así.
Haré como que has implementado los métodos consultores y los llamaré setNOMBREVARIABLE.
Código C++:
Ver originalvoid crear_profesor(vector<Profesor> & profesores){
int n, telefono, edad;
Profesor profe;
string nombre;
cout << "Cuantos profesores va a introducir: " << endl;
cin >> n;
for (int i=0; i<n; i++)
{
cout << "Nuevo profesor: " << endl;
cout << "Introduzca el nombre: ";
cin.getline (nombre,300);//Para string se usa esto
profe.setnombre(nombre);
cout << "Introduzca la edad: ";
cin >> edad;
profe.setedad(edad):
cout << "Introduzca el telefono: ";
cin >> telefono;
profe.settelefono(telefono);
cout << "" << endl;
profesores.push_back(profe);
}
}
Y los alumnos se los añades siguiendo un esquema parecido. En el método modificador, si haces por ejemplo setalumno(alumno), tendrás que añadirlo así:
Código:
misalumnos.push_back(alumno);
Ahora, en tu main, por ejemplo, para mostrar los profesores por orden e ir viendo sus atributos haces algo así (tomaré como que has hecho los métodos consultores con nombre getNOMBREVARIABLE):
Código C++:
Ver originalfor(int i=0; i<misprofesores.size();i++){
cout<< "Profesor "<<misprofesores[i].getnombre()<<" con edad "<<misprofesores[i].getedad()<< y telefono "<<misprofesores[i].gettelefono()<<endl;
}
Mírate bien lo que es un vector y los métodos que tiene (las funciones que puedes usar con él). Mira también ejemplos de uso, que los hay por Internet a patadas.
Probablemente haya errores en el código, pero aproximadamente es eso.
Un saludo.