2017-03-04 34 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实例的参考。