2017-03-04 12 views
0

これは単純なものでなければなりませんが、私はC++やバインドされた関数に慣れていません。基本的に私はこれをやろうとしている:私はserverインスタンス引数を使用する場合バインドされた関数にインスタンスを渡そうとしています。C++

server.on("/capture", HTTP_GET, std::bind(&SolarCamera::serverCapture, this, 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)); 

... 

そして、私はやりたいが、私はそのインスタンスにカメラのストリームを返すことができるようにSolarCameraクラスにそのserverインスタンスを渡すことです。カメラインタフェースは、この

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

のようなものです。しかし、コンパイラは、メソッドの呼び出しでbalksと危ないログをダンプします:

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インスタンスへの参照を与える必要があります。

関連する問題