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 指针上调用。解决方案:制作getTBFCmdHandler()一个const成员函数

于 2010-01-13T09:08:59.803 回答
1

在没有看到代码的情况下,我猜想它会getTBFInstallation()返回一个const TBFInstallation您试图调用非常量函数的代码。

于 2010-01-13T09:09:10.530 回答