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



我正在为ESP32(一种类似Arduino的芯片(编程。然而,为了更容易/更快地发现编译器错误/警告,并在以后的PC上进行某种虚拟化,我喜欢在PC上编译代码(使用Visual Studio(。

然而,我无法在PC上编译以下代码(当它在用于ESP32的Arduino IDE中编译时(:

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:UsersmichesourcereposRelayBox2RelayBoxRelayBoxRelayBoxServer.cpp  203 
Error   C2664   'void AsyncWebServer::on(const char *,int,AsyncWebServerRequest *)': cannot convert argument 3 from 'RelayBoxServer::Send::<lambda_6ffcff35888ca3a1f1d7d541e1edeba3>' to 'AsyncWebServerRequest *'  RelayBox    C:UsersmichesourcereposRelayBox2RelayBoxRelayBoxRelayBoxServer.cpp  206 

该代码基于位于的ESP32库https://github.com/me-no-dev/ESPAsyncWebServer/blob/master/src/ESPAsyncWebServer.h

我使用上面的库创建了"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,似乎源AsyncWebServer类有这样的签名:

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

ArRequestHandlerFunction实际上是:

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

因此,您创建的stub/mockAsyncWebServer似乎不应该使用AsyncWebServerRequest*,而是使用ArRequestHandlerFunction作为on方法的最后一个参数,与原始代码相对应。

最新更新