Arduino:类型'void(ClassName ::)()'的参数与附加中断的'void(*)()'不匹配

时间:2012-10-19 13:59:17

标签: c++ arduino

  

可能重复:
  How do you pass a member function pointer?

所以我一直在为Arduino编写一些库,以减少我一直在研究的相当大的草图。到目前为止,一切都在工作,除了在我的一个类的构造函数中。我用它来初始化任何变量,引脚模式和附加中断。 当我尝试附加中断时出现问题,我在我的类中声明和定义了函数,以及我是否在setup()块中的Arduino草图中附加它们,或者如果我在构造函数的库中执行它,我收到这个错误:

类型'void(RotaryEncoders ::)()'的参数与'void(*)()'不匹配

代码的基本结构如下:

RotaryEncoders::RotaryEncoders() {
     //Initialise some variables
     //Set up some pin modes
     attachInterrupt(2, doRedEncoder, CHANGE);
}

void RotaryEncoders::doRedEncoder() {
     //Some code, blah blah blah
}

我认为当你纯粹在Arduino IDE中执行此操作时,这些工具会对内存中的函数执行某些操作以使其正常工作。我认为解决方案很简单,但我不明白:S 谢谢:D

1 个答案:

答案 0 :(得分:1)

指向成员函数的函数指针是个坏主意,因为这些函数通常由对象使用。

解决问题的两种方法:

Solution1:有一个外部函数(非成员函数)(常规C风格函数)为你做事。

解决方案2: Look at this

祝你好运。