Ошибка lvalue требуется как одинарная ‘& amp;’ операнд

У меня проблема при создании потока в объекте. Ошибка lvalue требуется как одинарный&операнд

Файл 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 :: processDataAQ (), это); и я не понимаю что не так.

Главное, я создаю такой объект.

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

Любая помощь будет оценена.

Решение:
+ Изменить &AirQ :: processDataAQ () для &AirQ :: processDataAQ. Последний является указателем на функцию-член. — Пит Беккер

0

Решение

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

Скобки вызывают функцию. Вы не хотите вызывать функцию; Вы только хотите назвать это.

Снимите скобки.


Я бы также предложил избавиться от инициализации копирования.

Итак, просто:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]