Это должно быть что-то простое, но у меня нет опыта работы с 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]
В своем заявлении связывания вы используете this
, который указывает на случай SolarServer
но метод, к которому вы пытаетесь привязаться, имеет тип SolarCamera
, Вместо того, чтобы использовать this
, вам нужно дать ему ссылку на экземпляр SolarCamera.
Других решений пока нет …