如何使用 lambda 函数修复此方法中的参数类型转换编译器错误?

How can I fix the argument type conversion compiler errors in this method using a lambda function?

我正在为 ESP32(一种类似 Arduino 的芯片)编程。然而,为了 easier/faster 找到编译器 errors/warnings 然后在 PC 上进行某种虚拟化,我喜欢也在 PC 上编译代码(使用 Visual Studio)。

但是,我无法在 PC 上编译以下代码(当它在 Arduino IDE 中为 ESP32 编译时):

server.on("/", HTTP_GET, [](AsyncWebServerRequest* request)
    {
        request->send_P(200, "text/html", textBuffer, Processor);
    });

我得到的错误是:

Severity    Code    Description Project File    Line    Suppression State
Error (active)  E0413   no suitable conversion function from "lambda []void (AsyncWebServerRequest *request)->void" to "AsyncWebServerRequest *" exists RelayBox    C:\Users\miche\source\repos\RelayBox2\RelayBox\RelayBox\RelayBoxServer.cpp  203 
Error   C2664   'void AsyncWebServer::on(const char *,int,AsyncWebServerRequest *)': cannot convert argument 3 from 'RelayBoxServer::Send::<lambda_6ffcff35888ca3a1f1d7d541e1edeba3>' to 'AsyncWebServerRequest *'  RelayBox    C:\Users\miche\source\repos\RelayBox2\RelayBox\RelayBox\RelayBoxServer.cpp  206 

代码基于 https://github.com/me-no-dev/ESPAsyncWebServer/blob/master/src/ESPAsyncWebServer.h

处的 ESP32 库

还有 'stub' 类 我使用上面的库创建但针对我的项目进行了简化,使用“...”作为不相关的代码:

class AsyncWebServer
{
    ...
    void on(const char* something, int httpGet, AsyncWebServerRequest* function);
    ...
}

#define HTTP_GET           100

class AsyncWebServerRequest
{
public:
    void send_P(int port, const char* textHmlt, STRING text, ProcessorHandlerFunction function);
};

class ArduinoStringStub : public std::string
{
   ...
}

如何使用 lambda 函数修复此方法中的参数类型转换编译器错误?

我查看了你的参考资料github,来源AsyncWebServerclass似乎有这样的签名:

AsyncCallbackWebHandler& on(const char* uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest);

ArRequestHandlerFunctionactually:

typedef std::function<void(AsyncWebServerRequest *request)> ArRequestHandlerFunction;

所以好像你创建的stub/mock AsyncWebServer不应该把AsyncWebServerRequest*而是ArRequestHandlerFunction作为on方法的最后一个参数,对应使用原始代码。