这必须简单,但我对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 :(得分:0)
在绑定语句中,您使用this
,它指向SolarServer
的实例,但是,您尝试绑定的方法属于{{1 }}。您需要为SolarCamera实例提供引用,而不是使用SolarCamera
。