代码之家  ›  专栏  ›  技术社区  ›  Bartlomiej Dlugosz

无法将对象传递到函数中

  •  0
  • Bartlomiej Dlugosz  · 技术社区  · 2 年前

    所以我试图制作一个程序,在树莓π和加速度计/陀螺仪之间提供接口。我需要这个功能尽可能频繁地更新,我想设置一个计时器来确定它何时运行。

    这是我的代码:

    void updateGyro(Gyro gyro) {
        gyro.update();
    }
    
    int main() {
        if (gpioInitialise() < 0)
            return -1;
    
        // Creates new gyro object
        Gyro gyro;
        // Sets a timer to update every 10 milliseconds
        gpioSetTimerFuncEx(0, 10, updateGyro, &gyro);
    
        
    
        time_sleep(10);
        gpioTerminate();
    }
    

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

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

    我尝试过将gyro.update函数直接传递到函数中,但也没有成功。有人知道怎么解决这个问题吗?

    以下是我要使用的函数的文档: Documentation

    1 回复  |  直到 2 年前
        1
  •  6
  •   Yksisarvinen    2 年前

    void* 不是任何数量的任何参数的占位符。它的意思正是,指向未知类型的单个指针。 updateGyro 不接受类型的参数 无效* ,它接受类型为的参数 Gyro

    您需要更改您的函数以接受 无效* 相反:

    void updateGyro(void* arg) {
        Gyro* gyro = static_cast<Gyro*>(arg);
        gyro->update();
    }
    
    推荐文章