Da steht klar dort dass du versucht ein std::function Objekt einem void(*)() Funktionszeiger zuzuweisen
Naja..... wenn man es lesen kann..... ich sage dir lieber nicht was für mich da steht.... ![]()
Ich habe deinen Vorschlag jetzt in meine "ESP8266_Basic_webServer", hoffentlich richtig, eingebunden.
ESP8266_Basic_webServer.h
#include <functional>
typedef std::function<void(void)> CallbackFunction;
class ESP8266_Basic_webServer{
public:
ESP8266_Basic_webServer();
CFG *cfg;
void set_cfgPointer(CFG *p);
//void set_saveConfigCallback( void (*func)(void) );
//void (*_saveConfigCallback)(void) = NULL;
void set_saveConfigCallback(CallbackFunction c);
CallbackFunction callback;
//typedef std::function<void(void)> THandlerFunction;
//void set_saveConfigCallback(THandlerFunction handler);
private:
ESP8266WebServer webServer;
ESP8266_Basic_webServer.cpp
void ESP8266_Basic_webServer::set_saveConfigCallback(CallbackFunction c){
//void ESP8266_Basic_webServer::set_saveConfigCallback( void (*func)(void) ){
Serial.print("saving WEB data");
callback = c;
//_saveConfigCallback = handler;
}
void ESP8266_Basic_webServer::cfgPageHandler()
{
// Check if there are any GET parameters
if (webServer.hasArg("webUser")) strcpy(cfg->webUser, webServer.arg("webUser").c_str());
webServer.send(200, "text/html", rm);
//if ( _saveConfigCallback != NULL) {
//_saveConfigCallback();
//}
if ( callback != NULL) {
callback();
}
}
Der Aufruf aus der "ESP8266_Basic" sieht jetzt so aus:
ESP8266_Basic.cpp
ESP8266_Basic::ESP8266_Basic() : mqtt_client(wifi_client), webServer(){
/*
static ESP8266_Basic* obj = NULL;
obj = this;
webServer.set_saveConfigCallback(
[]() { obj->saveConfigCallback(); }
);
*/
webServer.set_saveConfigCallback(std::bind(&ESP8266_Basic::saveConfigCallback, this));
}
Das läßt sich compilieren, gibt aber lauter Resets