使用类成员的 C++ 函数回调并在 main 中运行
Posted
技术标签:
【中文标题】使用类成员的 C++ 函数回调并在 main 中运行【英文标题】:C++ Function Callback using class member and run it in main 【发布时间】:2020-03-29 21:38:11 【问题描述】:我知道,很多帖子都在问这个问题,已经阅读了大约 10 篇答案很长的帖子,但是,每篇帖子似乎都不同,需要不同的实施。
那么,我在这里做错了什么?
#include <iostream>
using namespace std;
class Foo
public:
void callbackFunc(void (*funcParam1)());
void funcA();
;
void Foo::callbackFunc(void (*funcParam1)())
funcParam1();
void Foo::funcA() cout << "func A OK.." << endl;
void aa()
int x =0;
Foo bar;
int main() bar.callbackFunc(bar.funcA);
此示例在main()
中抛出error: invalid use of non-static member function ‘void Foo::funcA()’
,尤其是在callbackFunc
参数中。
我想稍后在 arduino 中使用它。
【问题讨论】:
你需要一个对象来调用成员函数 成员函数指针不同于常规函数指针 (***.com/questions/2402579/…) 目前尚不完全清楚您想通过该设计实现什么,因为callbackFunc
会立即调用该函数。您是否真的想存储回调以供以后调用?签名总是void(*)()
吗?
&Foo::funcA
不是bar.funcA
。
@idclev463035818 &Foo::funcA
是引用非静态成员函数的正确语法。
【参考方案1】:
static funcA
可能会出现错误:
static void funcA();
看起来问题在于您的 callbackFunc
需要一个函数指针,但成员函数 funcA
不是一个普通函数,并且需要一个对象开头。将其设为static
即可解决问题。
【讨论】:
嗨,这部分正确。但是,稍后,每个实例将使用每个类的变量。因此,将其设为静态并不能解决问题。但是,谢谢你的回答。以上是关于使用类成员的 C++ 函数回调并在 main 中运行的主要内容,如果未能解决你的问题,请参考以下文章