为什么我不能使用getter访问public var?

时间:2010-01-13 09:05:08

标签: c++ boost shared-ptr

有一个包含这些陈述的文件:

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函数,会发生以下错误:

  

'家政:: TBFInstallation :: getTBFCmdHandler'   :无法转换'this'指针   'const Housekeeping :: TBFInstallation'   'Housekeeping :: TBFInstallation&amp;'

这里出了什么问题?

3 个答案:

答案 0 :(得分:7)

显然,this->getTBFInstallation()返回一个const指针。您还需要使用函数getTBFCmdHandler const。

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

请注意第一行末尾的const关键字。

修改:通过添加const,您实际上将this的类型从TBFInstallation *更改为TBFInstallation const *。基本上,通过添加const,您可以说即使调用函数的对象是const,也可以调用该函数。

答案 1 :(得分:1)

getTBFInstallation()(显然)返回一个const指针。但是,getTBFCmdHandler()是非const成员函数,因此不能在const指针上调用。解决方案:使getTBFCmdHandler()成为const成员函数

答案 2 :(得分:1)

如果没有看到代码,我会猜测getTBFInstallation()会返回一个const TBFInstallation,你试图调用非const函数。

相关问题