如何使用 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,来源AsyncWebServer
class似乎有这样的签名:
AsyncCallbackWebHandler& on(const char* uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest);
而ArRequestHandlerFunction
是actually:
typedef std::function<void(AsyncWebServerRequest *request)> ArRequestHandlerFunction;
所以好像你创建的stub/mock AsyncWebServer
不应该把AsyncWebServerRequest*
而是ArRequestHandlerFunction
作为on
方法的最后一个参数,对应使用原始代码。
我正在为 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,来源AsyncWebServer
class似乎有这样的签名:
AsyncCallbackWebHandler& on(const char* uri, WebRequestMethodComposite method, ArRequestHandlerFunction onRequest);
而ArRequestHandlerFunction
是actually:
typedef std::function<void(AsyncWebServerRequest *request)> ArRequestHandlerFunction;
所以好像你创建的stub/mock AsyncWebServer
不应该把AsyncWebServerRequest*
而是ArRequestHandlerFunction
作为on
方法的最后一个参数,对应使用原始代码。