对未解析的重载函数类型的调用没有匹配的函数

No matching function for call to unresolved overloaded function type

本文关键字:函数 调用 类型 重载      更新时间:2023-10-16

我遇到了一个我不理解的错误。我相信这很简单。。但我仍在学习C++。我不确定这是否与纯虚拟函数声明的参数完全相同有关,或者是其他原因。

这是我的简化代码:

in header_A.h
class HandlerType
{
public:
   virtual void Rxmsg(same parameters) = 0; //pure virtual
};
--------------------------------------------------
in header_B.h
class mine : public HandlerType
{
public:
   virtual void myinit();
   void Rxmsg(same parameters); // here I have the same parameter list 
//except I have to fully qualify the types since I'm not in the same namespace
};
--------------------------------------------------
in header_C.h
class localnode
{
public:
virtual bool RegisterHandler(int n, HandlerType & handler);
};
--------------------------------------------------
in B.cpp
using mine;
void mine::myinit()
{
   RegisterHandler(123, Rxmsg); //this is where I am getting the error
}
void Rxmsg(same parameters)
{
   do something;
}

在我看来,bool RegisterHandler(int n, HandlerType & handler)引用了类HandlerType的对象,而您正试图传递一个函数。显然,这是行不通的。

所以我认为你想做的是传递*this而不是Rxmsg。这将为RegisterHandler提供一个类mine的实例,现在可以在该实例上调用被重写的函数Rxmsg

请注意,如果这样做,函数Rxmsg将在变量*this提供给RegisterHandler时的同一对象上调用。

我希望这是你打算做的,我希望我能帮助你。

RegisterHandler(123, Rxmsg);更改为RegisterHandler(123, *this);解决了问题。谢谢