C++ 为什么可以';我不能使用getter访问公共var吗?
具有包含以下语句的文件:C++ 为什么可以';我不能使用getter访问公共var吗?,c++,boost,shared-ptr,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_tbfCmdH
public:
boost::shared_ptr<TBFControl::TbfCmdHandler> _tbfCmdHandlerPtr;
// will be private later...
boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler()
{ return _tbfCmdHandlerPtr; }
公共:
boost::shared_ptr_tbfCmdHandlerPtr;
//稍后将是私人的。。。
boost::sharedptrgettbfcmdhandler()
{return\u tbfCmdHandlerPtr;}
我可以这样使用它:
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()-> _tbfCmdHandlerPtr );
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()->getTBFCmdHandler() );
boost::共享的(
这->getBFinstallation()->\u tbfCmdHandlerPtr);
但不是像我想的那样:
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()-> _tbfCmdHandlerPtr );
boost::shared_ptr<TBFControl::TbfCmdHandler>myTbfCmdHandlerPtr(
this->getTBFInstallation()->getTBFCmdHandler() );
boost::共享的(
这->gettbinstallation()->getTBFCmdHandler());
使用getter函数时,会发生以下错误:
'内务管理::TbFinInstallation::getTBFCmdHandler'
:无法从转换“this”指针
“施工内务管理::TBF安装”
至“内务管理::TBFinInstallation&”
这里出了什么问题?显然,
this->gettbinstallation()
返回一个常量指针。您还需要使函数getTBFCmdHandler
const
boost::shared_ptr<TBFControl::TbfCmdHandler> getTBFCmdHandler() const
{
return _tbfCmdHandlerPtr;
}
boost::shared_ptr getTBFCmdHandler()const
{
返回tbfCmdHandlerPtr;
}
注意第一行末尾的const
关键字
编辑:通过添加
const
,实际上您正在将此
的类型从TBFInstallation*
更改为TBFInstallation const*
。基本上,通过添加const
,可以说即使调用函数的对象是const,也可以调用该函数。gettbinstallation()
显然返回了一个const指针。但是,getTBFCmdHandler()
是一个非常量成员函数,因此不能对常量指针调用。解决方案:在没有看到代码的情况下,将getTBFCmdHandler()
作为常量成员函数我猜gettbinstallation()
返回一个const TBFInstallation
,您正试图调用该函数。getTBFInstallation()如何声明的?顺便说一句:没有必要将this->
放在这些语句的开头,除非您还有一个名为gettbinstallation
.j_random\u hacker的局部变量(或局部声明的函数!),这可能是必需的,这取决于函数是否被继承以及从何处继承。实际上,为了可读性,我更喜欢使用this->
作为调用的前缀(虽然我不这样做,但我用m
作为变量的前缀)。我更喜欢在引用方法时使用this。只需在代码检查期间更容易知道符号是本地方法,因为它也可能是类型、自由函数或变量。@j_random_hacker,这是错误的。如果没有这个->
前缀,依赖基就不会被搜索。Goz,是的,那也行。由于getTBFCmdHandler
是一个getter函数,但是,按照我的方式来做可能更好。它可以工作,但我不明白为什么我必须在函数末尾编写const,我本来会假设在函数之前编写const,但这不起作用。结尾的const基本上表示在这个指针上有一个常量。如果您正在调用一个常量类指针,而函数需要一个常量,那么它将无法工作。。。