c++ 无法将对象传递到函数

x0fgdtte  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(243)

因此,我试图制作一个程序来提供树莓派和加速度计/陀螺仪之间的接口。我需要这个函数尽可能经常更新,我想设置一个计时器,当它将运行。
下面是我的代码:

  1. void updateGyro(Gyro gyro) {
  2. gyro.update();
  3. }
  4. int main() {
  5. if (gpioInitialise() < 0)
  6. return -1;
  7. // Creates new gyro object
  8. Gyro gyro;
  9. // Sets a timer to update every 10 milliseconds
  10. gpioSetTimerFuncEx(0, 10, updateGyro, &gyro);
  11. time_sleep(10);
  12. gpioTerminate();
  13. }

但这似乎不起作用,我得到了一个错误:

  1. gyro.cpp: In function int main()’:
  2. gyro.cpp:113:31: error: invalid conversion from void (*)(Gyro)’ to gpioTimerFuncEx_t {aka void (*)(void*)’} [-fpermissive]
  3. 113 | gpioSetTimerFuncEx(0, 10, updateGyro, &gyro);
  4. | ^~~~~~~~~~
  5. | |
  6. | void (*)(Gyro)
  7. In file included from gyro.cpp:2:
  8. /usr/include/pigpio.h:3751:55: note: initializing argument 3 of int gpioSetTimerFuncEx(unsigned int, unsigned int, gpioTimerFuncEx_t, void*)’
  9. 3751 | unsigned timer, unsigned millis, gpioTimerFuncEx_t f, void *userdata);
  10. | ~~~~~~~~~~~~~~~~~~^

我试过直接将gyro.update函数传入函数,但也不起作用。有谁知道怎么解决这个问题吗?
下面是我想使用的函数的文档:

wxclj1h5

wxclj1h51#

void*不是任何数量的任何参数的占位符。它的意思就是,指向未知类型的单指针。updateGyro不接受void*类型的参数,它接受Gyro类型的参数。
您需要更改您的函数以接受void*

  1. void updateGyro(void* arg) {
  2. Gyro* gyro = static_cast<Gyro*>(arg);
  3. gyro->update();
  4. }

相关问题