[英]how to pass a void function to a void pointer in C++
这是我的问题:我有我的 tact 类,用于嵌入式应用程序中的触觉按钮。
我添加了 setFunctions() 函数,以便我可以将 3 个函数链接到我创建的每个 tact 实例(它将处理短按钮按下、释放和长按)。
class tact
{
public:
tact(int assigned_pin, input_shift_register shift = {0,0,0}); // Constructor
void debounce();
short poll(bool debounce_flag);
void activate();
void setFunctions(void short_press_function(void), void release_press_function(void), void long_press_function(void));
short state;
private:
int pin;
void (*short_ptr)(void);
void (*release_ptr)(void);
void (*long_ptr)(void);
}
因此,我可以在 main 中为我需要的每个 tact 实例创建 3 个独特的函数,并使用 setFunctions() 成员将它们链接到 tact 实例。
这就是 setFunctions 成员的工作方式(或应该这样做)。 它将 3 个独特的函数链接到 3 个 void 指针,它们是私有下的 tact 类的一部分:
void tact::setFunctions(void short_press_function(), void release_press_function(), void long_press_function())
{
short_ptr = short_press_function;
release_ptr = release_press_function;
long_ptr = long_press_function;
}
然后,指针用于访问来自 activate 成员的功能(一个简单的开关案例,用于查看轻触按钮当前处于哪种状态):
void tact::activate()
{
switch (tact::state)
{
case SHORT_EFFECT_REQUIRED:
short_ptr();
break;
case RELEASE_EFFECT_REQUIRED:
release_ptr();
break;
case LONG_EFFECT_REQUIRED:
long_ptr();
break;
default:
break;
}
tact::state = 0;
}
总的来说,我打算这样做:
void up_short()
{
}
void up_release()
{
}
void up_long()
{
}
tact upPin(2);
void setup()
{
upPin.setFunctions(up_short(), up_release(), up_long()); //ERRORS ARE HERE!!
}
void loop()
{
//use the tact buttons in my applications!
upPin.poll(DEBOUNCED); // Updates upPin.state
if(upPin.state) //if not 0, either pressed, released, or pressed long enough
upPin.activate();
}
但是 setFunctions() 提到了 3 次相同的错误:
argument of type "void" is incompatible with parameter of type "void (*)()"
我作为参数传递给 setFunctions() 的 3 个函数中的每一个都有一个错误
所以我的问题是我做错了什么? 我真的很喜欢如何简单地使用 upPin.activate 来访问我的函数,而正确的函数是自动完成的。我不明白为什么 setFunctions() 不让我将 void 函数链接到我的 void 函数指针???
谢谢!
线路:
upPin.setFunctions(up_short(), up_release(), up_long())
分别调用up_short()
、 up_release()
和up_long()
函数。 这些函数返回void
,然后将其传递给setFunctions
每个参数 - 这就是您遇到此错误 3 次的原因。
您想要做的是将(指向)函数本身传递给setFunctions
如果您将行更改为:
upPin.setFunctions(up_short, up_release, up_long);
你应该看到这个作品
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.