需要作为一元'&'操作数的错误左值
Error lvalue required as unary '&' operand
我在对象中创建线程时遇到问题。错误是需要左值作为一元"&"操作数
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);
相关文章:
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 错误 C2679 二进制"<<":未找到采用类型为 'T' 的右侧操作数的运算符
- 错误:'operator>'不匹配(操作数类型为 'Student' 和 'Student'
- 如何摆脱逗号运算符的这个错误右操作数没有效果( wunsued 值)?
- c++ 错误:二进制"运算符+"类型"矩阵*"和"矩阵*"的操作数无效
- 使用堆栈编译错误的 C++ 反向行没有运算符匹配操作数
- 当我尝试构建此程序时,出现此错误:需要左键作为赋值的左操作数
- 错误:二进制">>":未找到采用类型为"const char [1] 的右操作数的运算符
- C++ 重载:[错误] 与'operator='不匹配(操作数类型为 'String' 和"字符串")
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- C++ 运算符不匹配操作数错误
- c++的cout操作数错误,类型错误
- 使用cin时,字符串上的右操作数错误
- OpenCV无效操作数错误
- 需要lvalue作为增量操作数错误
- C++无效操作数错误
- c++模板类冒泡排序操作数错误