我正在使用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");
是一个初始化多任务循环的函数。
谢谢大家的帮助。
答案 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
保留在范围内,但是我对库的了解不足,无法对您进行培训。请参阅其文档。