ゲッターを使用して公開varにアクセスできないのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2055486

  •  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関数を呼び出そうとしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top