ゲッターを使用して公開varにアクセスできないのはなぜですか?
-
20-09-2019 - |
質問
これらのステートメントを含むファイルを持っています:
public:
boost::shared_ptr<TBFControl::TbfCmdHandler> _tbfCmdHandlerPtr;
// will be private later...
boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler()
{ return _tbfCmdHandlerPtr; }
このように使用できます:
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()-> _tbfCmdHandlerPtr );
しかし、私が望んでいるように、このように:
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()->getTBFCmdHandler() );
ゲッター関数を使用すると、次のエラーが発生します。
'HouseKeeping :: tbfinStallation :: gettbfcmdhandler':「const housekeeping :: tbfinstallation」から「Housekeeping :: tbfinstallation&」に「この」ポインターを変換できません。
ここで何が問題になっているのですか?
解決
明らかに、 this->getTBFInstallation()
constポインターを返します。関数を作成する必要があります getTBFCmdHandler
constも。
boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler() const
{
return _tbfCmdHandlerPtr;
}
注意してください const
最初の行の終わりにキーワード。
編集: 追加することによって const
, 、あなたは実際にタイプを変えています this
から TBFInstallation *
に TBFInstallation const *
. 。基本的に、を追加することにより const
, 、関数が呼ばれているオブジェクトがconstであっても、関数は呼び出すことができると言っています。
他のヒント
getTBFInstallation()
(明らかに)constポインターを返すことです。でも、 getTBFCmdHandler()
非constメンバー関数であるため、constポインターで呼び出すことはできません。解決策:make getTBFCmdHandler()
constメンバー関数
コードを見なかったと思います getTBFInstallation()
返品a const TBFInstallation
非const関数を呼び出そうとしています。