在另一个类中使用的非静态类<unresolved overloaded =“”function =“”type =“”> </unresolved>

时间:2014-08-26 09:28:22

标签: c++ class static

我正在努力使用另一个类中的一个类的非静态函数。我一直在阅读一些例子,但很难理解它的基础知识。到目前为止,我最好的尝试是使用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;
}

错误是: 错误:没有匹配函数来调用&#39; MPTimers :: attachFunction(未解析的重载函数类型)。

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

我尝试了链接中描述的解决方案,但没有成功。希望你们中的一些人可以帮我解决这个问题:)。

2 个答案:

答案 0 :(得分:2)

如果要在非静态成员函数上使用functer,则语法为

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

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

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

答案 1 :(得分:0)

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