对非静态成员函数的引用必须称为错误

时间:2019-07-12 11:41:44

标签: c++

我正在使用C ++创建计时器。香港专业教育学院查找互联网,但找不到我能理解的任何东西。这是我的代码:

struct Timer{
  bool timerRunning;
  int time;
  void Timer_Service(void* param){
    timerRunning = true;
    time = 0;
      while(timerRunning){
        wait(10);
        time += 10;
      }
  }
  void startTimer(){
    Timer_Service((void*)"PROS");
    pros::Task timerservice(Timer_Service,(void*)"PROS");// <- error here "reference to non-static member function must be called"
  }
  void stopTimer(){
    timerRunning = false;
  }
  int getTime(){
    return time;
  }
};

我该如何解决此错误? BTW pros::Task timerservice(Timer_Service,(void*)"PROS");是一个初始化多任务循环的函数。 谢谢大家的帮助。

1 个答案:

答案 0 :(得分:4)

pros::Task构造函数takes a function pointer

函数指针和成员函数指针为not the same thing

您将必须将指针传递给非成员函数(或static成员),最好是转发委托。您可以创建一个包含Timer_Service*的类,并将其通过void*参数传递。实际上,在这种情况下,由于您仅需要传递对象指针,因此不需要包装类。

struct Timer
{
  bool timerRunning;
  int time;

  static void Timer_Service_Delegate(void* param) {
     Timer* ptr = reinterpret_cast<Timer*>(param);
     ptr->Timer_Service();
  }

  void Timer_Service() {
    timerRunning = true;
    time = 0;
      while(timerRunning){
        wait(10);
        time += 10;
      }
  }

  void startTimer() {
    pros::Task timerservice(
       Timer_Service_Delegate,
       reinterpret_cast<void*>(this)
    );
  }

  void stopTimer() {
    timerRunning = false;
  }

  int getTime() {
    return time;
  }
};

我怀疑您还需要将pros::Task保留在范围内,但是我对库的了解不足,无法对您进行培训。请参阅其文档。