2017-03-04 41 views
0

這必須是簡單的東西,但我沒有使用C++或綁定函數的經驗。基本上我試圖做到這一點:嘗試將實例傳遞給綁定函數C++

server.on("/capture", HTTP_GET, std::bind(&SolarCamera::serverCapture, this, server)); 

問題是,當我使用server實例論證。其他沒有這個實例的類似綁定也沒問題。

server在這裏定義爲受保護的方法。

//SolarServer.hpp 

class SolarServer 
{ 
    public: 
    SolarServer(int port); 
    void startRouter(); 
    protected: 
    ESP8266WebServer server; 
}; 

//SolarServer.cpp 

SolarServer::SolarServer(int port): server(port){} 

void SolarServer::startRouter() { 

    //capture cam 
    server.on("/capture", HTTP_GET, std::bind(&SolarCamera::serverCapture, this, server)); 

... 

所有我想要做的是,server實例傳遞給SolarCamera類,所以我可以返回一個攝像頭流到該實例。拍照界面是這樣

// SolarCamera.hpp 
class SolarCamera 
{ 
    public: 
    SolarCamera(); 
    void serverCapture(ESP8S266WebServer& server); 
    protected: 
    ArduCAM myCAM; 
}; 

但是,編譯器不太願意在方法調用和轉儲粗糙日誌:

error: pointer to member t 
ype 'void (SolarCamera::)(ESP8266WebServer&)' incompatible with object type 'SolarServer' 
error: return-statement wi 
th a value, in function returning 'void' [-fpermissive] 

回答

0

在你使用this您綁定的語句,它指向的一個實例SolarServer,但是,您嘗試綁定的方法類型爲SolarCamera。您不需要使用this,您需要給它一個SolarCamera實例的參考。