无法将对象传递给函数

Bar*_*osz 0 c++ raspberry-pi raspberry-pi-zero pigpio

所以我正在尝试编写一个程序来提供树莓派和加速计/陀螺仪之间的接口。我需要这个函数尽可能频繁地更新,并且我想设置一个计时器来确定它何时运行。

\n

这是我的代码:

\n
void updateGyro(Gyro gyro) {\n    gyro.update();\n}\n\nint main() {\n    if (gpioInitialise() < 0)\n        return -1;\n\n    // Creates new gyro object\n    Gyro gyro;\n    // Sets a timer to update every 10 milliseconds\n    gpioSetTimerFuncEx(0, 10, updateGyro, &gyro);\n\n    \n\n    time_sleep(10);\n    gpioTerminate();\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但这似乎不起作用,我收到错误:

\n
gyro.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\ngyro.cpp:113:31: error: invalid conversion from \xe2\x80\x98void (*)(Gyro)\xe2\x80\x99 to \xe2\x80\x98gpioTimerFuncEx_t\xe2\x80\x99 {aka \xe2\x80\x98void (*)(void*)\xe2\x80\x99} [-fpermissive]\n  113 |     gpioSetTimerFuncEx(0, 10, updateGyro, &gyro);\n      |                               ^~~~~~~~~~\n      |                               |\n      |                               void (*)(Gyro)\nIn file included from gyro.cpp:2:\n/usr/include/pigpio.h:3751:55: note:   initializing argument 3 of \xe2\x80\x98int gpioSetTimerFuncEx(unsigned int, unsigned int, gpioTimerFuncEx_t, void*)\xe2\x80\x99\n 3751 |    unsigned timer, unsigned millis, gpioTimerFuncEx_t f, void *userdata);\n      |                                     ~~~~~~~~~~~~~~~~~~^\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试过将 gyro.update 函数直接传递到该函数中,但这也不起作用。有谁知道如何解决这一问题?

\n

这是我要使用的函数的文档:\n文档

\n

Yks*_*nen 6

void*不是任何数量的任何参数的占位符。这正是意味着,指向未知类型的单指针。updateGyro不接受 type 的参数void*,它接受 type 的参数Gyro

您需要更改您的函数以接受void*

void updateGyro(void* arg) {
    Gyro* gyro = static_cast<Gyro*>(arg);
    gyro->update();
}
Run Code Online (Sandbox Code Playgroud)