0

这一定很简单,但我对 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]
4

1 回答 1

0

在您使用的绑定语句中this,它指向 的实例SolarServer,但是,您尝试绑定的方法是 type SolarCamerathis您需要为其提供对 SolarCamera 实例的引用,而不是使用。

于 2017-03-09T21:25:43.980 回答