Question

ayant un fichier contenant ces déclarations:

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

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

Je peux l'utiliser de cette façon:

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

mais pas, comme je veux, de cette façon:

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

Utilisation de la fonction getter, l'erreur suivante se produit:

  

':: Entretien ménager TBFInstallation :: getTBFCmdHandler'   : Ne peut pas convertir pointeur « this » de   'Const :: Entretien ménager TBFInstallation'   à ':: Entretien ménager TBFInstallation &'

ce qui se passe mal ici?

Était-ce utile?

La solution

De toute évidence, this->getTBFInstallation() renvoie un pointeur const. Vous devez faire la fonction getTBFCmdHandler const ainsi.

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

Notez le mot-clé const à la fin de la première ligne.

Modifier En ajoutant const, vous êtes en effet changeant le type de this de TBFInstallation * à TBFInstallation const *. Au fond, en ajoutant le const, vous dites que la fonction peut être appelée même lorsque l'objet sur lequel la fonction est appelée est const.

Autres conseils

getTBFInstallation() est (apparemment) de retourner un pointeur const. Cependant, getTBFCmdHandler() est une fonction membre non-const et ne peut donc pas être appelé un pointeur const. Solution: getTBFCmdHandler() une fonction membre const

Sans avoir vu le code que je suppose que getTBFInstallation() retourne un const TBFInstallation sur lequel vous essayez d'appeler une fonction non const.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top