试图将实例传递给绑定函数C ++

时间:2017-03-04 04:18:23

标签: c++ arduino arduino-esp8266

这必须简单,但我对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]

1 个答案:

答案 0 :(得分:0)

在绑定语句中,您使用this,它指向SolarServer的实例,但是,您尝试绑定的方法属于{{1 }}。您需要为SolarCamera实例提供引用,而不是使用SolarCamera