I am trying to make a priority queue with a specific type class 'alumnos'.
I create 3 new classes (new, medium, old) who inherit from it.
Then I insert the classe into de queue. I would like to use polymorphism when extracting to use the correct function 'verificarEdad' but gives the error:
cola.cpp: 66: error: invalid initialization of the reference rate 'alumnos&' from an expression of type' const alumnos'
The code:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class alumnos{
public:
string nombre;
int edad;
alumnos( string nombre, int edad ){
this -> nombre = nombre;
this -> edad = edad;
};
virtual void verificarEdad(){
cout << "alumno" << endl;
};
};
class nuevo : public alumnos{
public:
nuevo( string nombre, int edad ) : alumnos(nombre,edad){};
void verificarEdad(){
if (edad < 20)
cout << "Nuevo" << endl;
};
};
class medio : public alumnos{
public:
medio( string nombre, int edad ) : alumnos (nombre, edad){};
void verificarEdad(){
if (edad > 20 && edad < 30)
cout << "Medio" << endl;
};
};
class viejo : public alumnos{
public:
viejo( string nombre, int edad ) : alumnos (nombre, edad){};
void verificarEdad(){
if (edad > 30)
cout << "Viejo" << endl;
};
};
bool operator > (alumnos alumno1, alumnos alumno2)
{
return alumno1.edad > alumno2.edad;
}
int main ()
{
priority_queue<alumnos, vector<alumnos>, greater<vector<alumnos>::value_type> > mypq;
mypq.push(nuevo("Helder", 25));
mypq.push(nuevo("Pepe", 18));
mypq.push(viejo("Pepito", 31));
mypq.push(medio("Juan", 21));
alumnos &al = mypq.top();
while (!mypq.empty()){
al.verificarEdad();
cout << "mypq.top() is now " << al.nombre << endl;
mypq.pop();
}
return 0;
}
How can I solve my problem?
Thanks.