我想在我的AHRS类中创建一个函数ahrs thats的线程。此函数处于无限循环中,并始终计算某些内容,并将这些计算结果放入变量中。我想将这些变量传递给我的PID

int main() {

    AHRS* a = new AHRS();
    std::thread ahrs(a->ahrs());

    PID* p = new PID();
    float pitch;
    while(1) {
        pitch = a->getPitch();
        std::cout << "pitch: " << pitch << " pid: " << p->getError(0, pitch, 1) << std::endl;
        usleep(100000);
    }
}

但是我得到了错误
main_ahrs.cpp: In function ‘int main()’:
main_ahrs.cpp:26:28: error: invalid use of void expression

我的ahrs.cpp看起来像这样:
#include "AHRS.h"

AHRS::AHRS() {
    //something
}

AHRS::~AHRS() {}

void AHRS::ahrs() {
    //something
    while(1) {
        //something
    }
}

float AHRS::getPitch() {
    //return something
}

float AHRS::getRoll() {
    //return something
}

float AHRS::getYaw() {
    //return something
}

感谢您的帮助

最佳答案

尝试这样:

#include <functional>

接着:
std::thread ahrs(std::bind(&AHRS::ahrs, a));

您正在执行的方式是调用a->ahrs()方法,该方法返回void。您必须将可以被调用的东西传递给std::thread:函数指针或类似的东西,而不是void

在我的建议情况下,您将把std::thread的返回值传递给std::bind,这是一个可调用对象,该对象带有指向方法的指针和指向AHRS对象的指针。

10-02 04:07