Pourquoi ne puis-je accéder à un public var en utilisant le getter?
-
20-09-2019 - |
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?
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.