0

これらのステートメントを含むファイルがある:

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() );

getter関数を使用すると、次のエラーが発生します。

'Housekeeping :: TBFInstallation :: getTBFCmdHandler':'this'ポインタを'const Housekeeping::TBFInstallation'から'Housekeeping:: TBFInstallation&'に変換できません

ここで何が問題になっていますか?

4

3 に答える 3

7

明らかにthis->getTBFInstallation()、constポインタを返します。getTBFCmdHandler関数もconstにする必要があります。

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

const最初の行の終わりにあるキーワードに注意してください。

編集:を追加するconstと、実際にはのタイプがthisからTBFInstallation *に変更されTBFInstallation const *ます。基本的に、を追加することconstで、関数が呼び出されているオブジェクトがconstの場合でも、関数を呼び出すことができるということです。

于 2010-01-13T09:07:21.827 に答える
1

getTBFInstallation()(どうやら)constポインタを返しています。ただし、getTBFCmdHandler()これは非constメンバー関数であるため、constポインターで呼び出すことはできません。解決策:getTBFCmdHandler()constメンバー関数を作成します

于 2010-01-13T09:08:59.803 に答える
1

コードを見ていないと、非const関数を呼び出そうとしているがgetTBFInstallation()返されると思います。const TBFInstallation

于 2010-01-13T09:09:10.530 に答える