另一个类中使用的非静态类<未解析的重载函数类型>

Non static class used in another class <unresolved overloaded function type>

本文关键字:重载 函数 gt 类型 静态类 lt 另一个      更新时间:2023-10-16

我很难在另一个类中使用一个类的非静态函数。我读了一些例子,但很难理解其中的基本内容。到目前为止,我最好的尝试是使用http://www.newty.de/fpt/callback.html#static

我有两个类:ledStrips和MPTimers。MPTimers是一个在Atmega上使用计时器的类。我想要的是能够在ledStrips中调用MPTimers的实例。在MPTimers类中,我可以附加一个回调函数,该函数将在每次计时器中断时运行。

下面是我的代码示例,仅显示相关内容。

MPTimers _timerOne;
// Constructor
ledStrips::ledStrips()
{
_timerOne.initialize(1000); // Set up timer with 1000 ms delay
_timerOne.attachFunction(timeout); // Attach a function to the timer
_timerOne.stop(); // Stop timer
}

timeout函数是.attachFunction中的参数,是ledStrips的成员。

这是MPTimers类中的代码

// AttachFunction
void MPTimers::attachFunction(void (*isr)() )
{
isrCallBack = isr;
}

错误是:错误:没有用于调用'MPTimers::attachFunction的匹配函数(未解析的重载函数类型)。

我知道这是因为我的MPTimers实例不知道回调函数引用的是哪个实例,因为它是类的非静态成员。

我尝试了链接中描述的解决方案,但没有成功。希望你们中的一些人能帮我弄清楚这一点:)。

如果您想在非静态成员函数上使用funter,语法应该是

void MPTimers::attachFunction(void (MPTimers::*isr)() )
{
isrCallBack = isr;
}

如果你想稍后调用它,语法将是

{
[....]
this->*isrCallback()
[....]
}

如果没有从类实例化的对象,就不能调用类的非静态方法。MPTimers::attachFunction需要一个静态方法或函数。如果你的timeout函数是一个普通的C函数,那么应该没有问题(所以显然不是这样),如果它是一个类的静态方法,那么你应该使用ClassName::timeout;如果它是类的非静态方法,则你不能做你想做的事,您需要修改attachFunction和MPTimers类以接受函数或对象/方法对(或使用静态超时方法)。