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基本上表示在这个指针上有一个常量。如果您正在调用一个常量类指针,而函数需要一个常量,那么它将无法工作。。。