El problema que te da el compilador reside en que no tiene sentido devolver una referencia en un método declarado const. Puesto que el const de la derecha significa que el uso de dicho método no modifica la clase y es obvio que si lo hace.
Si la semántica implica que no se pueda modificar entonces añadele const al tipo devuelto.
Código C++:
Ver originalconst tipo& leerDato() const {
return dato;
}
Si la semántica implica que se puede modificar quítale el const de la derecha al método.