有一个包含这些陈述的文件:
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;'
这里出了什么问题?
答案 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函数。