在 ESP AsyncWebServerRequest 库中传递处理器函数

问题描述 投票:0回答:1

我正在尝试将 ESPAsyncWebServer 库包含在自己的 C++ 类/库中。启动服务器时我正在努力传递处理器功能。

这里讨论了同样的问题: 通过指针调用成员函数 在类中将函数作为参数传递 ...但我找不到解决方案。

我的代码如下所示:

代码.ino:

#include "SoftwareUpdater.h"

AsyncWebServer server(80);
SoftwareUpdater Updater(&server);

void setup() {
  Serial.begin(115200);
  Updater.initialise();
}

void loop() {
}

软件更新程序.cpp:

#include "SoftwareUpdater.h"

SoftwareUpdater::SoftwareUpdater(AsyncWebServer *_server) {
  server = _server;
}

void SoftwareUpdater::initialise() {
  server->on("/manager", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(SPIFFS, "/index.htm", String(), false, [&](const String &var) -> String {
      return processor(var);
    });
  });
  server->begin();
};

String SoftwareUpdater::processor(const String &var) {
  if (var == "var_manager") {
    return "text";
  }
};

软件更新程序.h:

#ifndef SoftwareUpdater_h
#define SoftwareUpdater_h

#include "FS.h"
#include "SPIFFS.h"
#include <ESPAsyncWebServer.h>

class SoftwareUpdater {
private:
  void _setupAsyncServer();

public:
  AsyncWebServer *server;
  String processor(const String &var);

  SoftwareUpdater(AsyncWebServer *server);
  void initialise();
};

#endif

错误是:

无法调用成员函数 'String SoftwareUpdater::processor(const String&)' 没有对象退出状态 1 编译错误:'this' 是 未捕获此 lambda 函数

Picture: This is the error I get

c++11 asynchronous webserver esp32 arduino-esp32
1个回答
0
投票

您尝试在 lambda 函数中调用对象的属性,但该函数不知道该对象。因此,您也必须传递该对象。 像这样的东西:

server->on("/manager", HTTP_GET, [](AsyncWebServerRequest *request, SoftwareUpdater* obj) {
    request->send(SPIFFS, "/index.htm", String(), false, [&](const String &var, SoftwareUpdater* obj) -> String {
       return obj->processor(var);
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.