无法转换' void(MyClass :: *)()'到' void(*)()

时间:2015-04-03 16:25:46

标签: c++ qt pointers function-pointers member-function-pointers

我试图将函数void MainWindow :: lowPower()链接到wiringPiISR(int,int,void(*)(void)。我的问题是我收到以下错误:

cannot convert 'void (MyClass::*)()' to 'void (*)()

当我试图以这种方式指向这个功能时:

void (MainWindow::*lowPower)(void);
wiringPiISR(4, INT_EDGE_BOTH, lowPower);

wiringPiISR的语法是:

int wiringPiISR (int pin, int edgeType,  void (*function)(void))

我无法使lowPower静态,因为我需要调用几个对象

如何解决此问题?

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,这可能不是最好的方式,但可能性:

在* .cpp:

的开头
Trigger trigger;
void interrupt()
{
    emit trigger.triggered();
}

触发器是一个非常简单的类,只有一个公共信号(触发)。此信号在其默认构造函数中连接到MainWindow类中的公共槽,其中wiringPiISR也声明为:

wiringPiISR(0, INT_EDGE_BOTH, *interrupt);

我知道这不是完美的解决方案,因为它使用了函数指针,但我不想分别更改wiringPi.h的代码wiringPi.c。