2016-04-23 92 views
0

在對象中創建線程時出現問題。誤差左值需要作爲一元 '&' 操作數作爲一元'&'操作數需要的錯誤左值

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 ::線程空氣= std :: thread(& AirQ :: processDataAQ(),this);,我不明白什麼是錯的。

我主要我創建這樣的對象。

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

任何幫助將不勝感激。

解決方案: 變化& AIRQ :: processDataAQ()來& AIRQ :: processDataAQ。後者是一個指向成員函數的指針。 - Pete Becker

+0

@bkVnet 是但爲什麼它被作爲基準和 –

+3

變化'&AIRQ :: processDataAQ()''到AIRQ及:: processDataAQ'。後者是一個指向成員函數的指針。 –

+0

它的工作@PeteBecker請張貼它作爲解決方案接受它:) –

回答

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

方括號調用函數。你不想調用這個函數;你只想命名它。

刪除括號。


我也建議擺脫複製初始化。

所以,簡單地說:

std::thread air(&AirQ::processDataAQ, this); 
相關問題