<分区>
现在这似乎是一个奇怪的问题,但我遇到了一个让我大吃一惊的编译器错误,即使有修复,我也想知道它为什么会失败。
假装我正在使用一个名为 Corba 的 API,简称为 RPC。在我的程序中,我必须创建一个派生自 Corba 对象的对象。
class MyClass : public CorbaClass;
简单的东西,现在在 MyClass
的方法之一中,我正在调用一个需要 CorbaClass*
的函数,所以我只需传入 this
指针,请注意该方法不是 const 方法,所以它肯定可以正常工作吗?
但是我在编译时遇到错误,指出我尝试传递的参数实际上是 CorbaClass* const
类型。现在你可以想象我的困惑了,这肯定是不可能的,那需要 this
是一个左值,不是吗?所以突然之间,这让我质疑我对 C++ 本身的部分知识!
现在在 TAO 的文档(我正在使用的 Corba 的具体实现)中发现他们实际上有一段针对这种情况的代码,我看到他们做了一些奇怪的事情。他们没有直接传递 this
,而是调用一个方法 _this()
并通过它传递返回值,所以我做了一些挖掘,发现该方法是在Corba 基类为:
CorbaClass* _this(void);
现在这对我来说似乎完全疯了,但也许那是因为我以前从未遇到过它,有人知道为什么 this
会发生任何奇怪的事情吗?
我相信我使用的编译器是 GCC 4.5.1
编辑: 一些示例代码
我的类.h
class MyClass
: public POA_NotifyExt::ReconnectionCallback
{
public:
void Initialise();
private:
NotifyExt::ReconnectionRegistry_var m_ReconnectionRegistry;
}
我的类.cpp
void Initialise()
{
m_ReconnectionRegistry->register_callback( this );
}
产生错误:
error: no matching function for call to ‘NotifyExt::ReconnectionRegistry::register_callback(MyClass* const)’
orbsvcs/NotifyExtC.h:491:63: note: candidate is: virtual NotifyExt::ReconnectionRegistry::ReconnectionID NotifyExt::ReconnectionRegistry::register_callback(NotifyExt::ReconnectionCallback*)