另一个类中使用的非静态类<未解析的重载函数类型>
Non static class used in another class <unresolved overloaded function type>
我很难在另一个类中使用一个类的非静态函数。我读了一些例子,但很难理解其中的基本内容。到目前为止,我最好的尝试是使用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类以接受函数或对象/方法对(或使用静态超时方法)。
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?