需要作为一元'&'操作数的错误左值

Error lvalue required as unary '&' operand

本文关键字:操作数 错误 一元      更新时间:2023-10-16

我在对象中创建线程时遇到问题。错误是需要左值作为一元"&"操作数

CPP 文件

#include "AirQ.h"

static int i=0;

AirQ::AirQ(int pinNo, bool input):Sensor("AIRQUALITY", "PPM",pinNo,input) {
    threadShouldRunAQ = true;
    this->bufferLength = 256;
        signal(SIGINT, AirQ::signalHandler);
        airQualitySensor = new upm::Ublox6(pinNo);
        if (!airQualitySensor->setupTty(B9600))
            std::cerr << "[ERROR][GPS] Failed to setup tty port parameters!" << std::endl;
        try
        {
            std::thread air = std::thread(&AirQ::processDataAQ(), this);
        }
        catch (std::exception e)
        {
            std::cerr << "[ERROR][GPS] " << e.what() << std::endl;
        }
}
AirQ::~AirQ() {
    // TODO Auto-generated destructor stub
}

void AirQ::signalHandler(int sigNo)
{
    if (sigNo == SIGINT)
        threadShouldRunAQ = false;
}
void AirQ::processDataAQ()
{
    while (threadShouldRunAQ)
    {
        i++;
        if (airQualitySensor != NULL)
            if (airQualitySensor->dataAvailable())
            {
                //TODO
            }

            usleep(100000);
    }
}
void AirQ::getData(std::string value)
{
    this->readBuffer = value;
}
std::string AirQ::logData()
{
    AirQ::setCollectedFlag(false);
    return this->readBuffer;
}
void AirQ::setCollectedFlag(bool flag)
{
    this->collectedFlag = flag;
}

H 文件

#include <ublox6.h>
#include "Sensor.h"
#ifndef AIRQ_H_
#define AIRQ_H_
static bool threadShouldRunAQ;
static upm::Ublox6* airQualitySensor;

class AirQ: private Sensor {
private:
    std::string readBuffer;
    bool collectedFlag;
    size_t bufferLength;
    static void signalHandler(int);
    void processDataAQ();
protected:

public:
    AirQ(int, bool);
    virtual ~AirQ();
    std::string logData();
    void getData(std::string);
    void setCollectedFlag(bool);
    std::thread processingThread;
};

#endif /* AIRQ_H_ */

CPP 文件中报告了错误,行std::thread air = std::thread(&AirQ::p rocessDataAQ(), this);我不明白出了什么问题。

我主要创建这样的对象。

AirQ* test = new AirQ(0,true);

任何帮助将不胜感激。

溶液:将 &AirQ::p rocessDataAQ() 更改为 &AirQ::p rocessDataAQ。后者是指向成员函数的指针。– 皮特·贝克尔

std::thread air = std::thread(&AirQ::processDataAQ(), this);
//                                                ^^

括号调用函数。您不想调用该函数;你只想命名它。

取下支架。


我还建议摆脱复制初始化。

所以,简单地说:

std::thread air(&AirQ::processDataAQ, this);