Pregunta

tener un archivo que contiene estas declaraciones:

public:
boost::shared_ptr<TBFControl::TbfCmdHandler> _tbfCmdHandlerPtr;
// will be private later...

boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler()
{ return _tbfCmdHandlerPtr; }

Puedo usarlo de esta manera:

boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
    this->getTBFInstallation()-> _tbfCmdHandlerPtr );

pero no, como yo quiero, de esta manera:

boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
    this->getTBFInstallation()->getTBFCmdHandler() );

Uso de la función getter, se produce el error siguiente:

  

'Servicio de limpieza :: :: TBFInstallation getTBFCmdHandler'   : No se puede convertir este puntero de   'Const limpieza :: TBFInstallation'   a 'limpieza :: TBFInstallation &'

lo que está mal aquí?

¿Fue útil?

Solución

Obviamente, this->getTBFInstallation() devuelve un puntero constante. Es necesario para que la función const getTBFCmdHandler también.

boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler() const
{
    return _tbfCmdHandlerPtr;
}

Tenga en cuenta la palabra clave const al final de la primera línea.

Editar Al añadir const, estás en efecto cambiando el tipo de this de TBFInstallation * a TBFInstallation const *. Básicamente, mediante la adición de la const, que dice que la función puede ser llamada incluso cuando el objeto sobre el que se está llamando la función es const.

Otros consejos

getTBFInstallation() es (aparentemente) que devuelve un puntero constante. Sin embargo, getTBFCmdHandler() es una función miembro no constante y por lo tanto no puede ser llamado un puntero constante. Solución: Asegúrese de getTBFCmdHandler() un método constante

Sin haber visto el código yo supongo que getTBFInstallation() devuelve un const TBFInstallation en el que usted está tratando de llamar a una función no const.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top