【问题标题】:C++ Function Callback using class member and run it in main使用类成员的 C++ 函数回调并在 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 中使用它。

【问题讨论】:

  • 你需要一个对象来调用成员函数
  • 成员函数指针不同于常规函数指针 (stackoverflow.com/questions/2402579/…)
  • 目前尚不完全清楚您想通过该设计实现什么,因为callbackFunc 会立即调用该函数。您是否真的想存储回调以供以后调用?签名总是void(*)()吗?
  • &amp;Foo::funcA 不是bar.funcA
  • @idclev463035818 &amp;Foo::funcA 是引用非静态成员函数的正确语法。

标签: c++ function class arduino callback


【解决方案1】:

static funcA 可能会出现错误:

static void funcA();

看起来问题在于您的 callbackFunc 需要一个函数指针,但成员函数 funcA 不是一个普通函数,并且需要一个对象开头。将其设为static 即可解决问题。

【讨论】:

  • 嗨,这部分正确。但是,稍后,每个实例将使用每个类的变量。因此,将其设为静态并不能解决问题。但是,谢谢你的回答。
猜你喜欢
  • 2010-11-03
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 2012-12-20
相关资源
最近更新 更多