我对C ++ lambda表达式有一些奇怪的问题。 我有下一个代码:
.h 档案:
class WiFiManager {
public:
static void setupOnConnectedHandler(std::function<void(void)>);
};
.cpp 档案:
void setupOnConnectedHandler(std::function<void(void)> handler) {
connectedHandler = WiFi.onSoftAPModeStationConnected(
[&handler](const WiFiEventSoftAPModeStationConnected&) {
handler();
}
);
}
当我尝试从客户端代码传递lambda时:
void setupWiFi() {
WiFiManager::setupOnConnectedHandler(
[](void) {
Serial.print("Connected");
}
);
}
我有一个编译器错误,如下所示:
.pioenvs/nodemcuv2/src/controllers/ConfigurationModeController/ConfigurationModeController.o:(.text._Z9setupWiFiv+0x8): undefined reference to `WiFiManager::setupOnConnectedHandler(std::function<void ()>)'
.pioenvs/nodemcuv2/src/controllers/ConfigurationModeController/ConfigurationModeController.o: In function `setupWiFi()':
ConfigurationModeController.cpp:(.text._Z9setupWiFiv+0x50): undefined reference to `WiFiManager::setupOnConnectedHandler(std::function<void ()>)'
collect2: error: ld returned 1 exit status
我花了几天的RTFM和C ++规范,但不明白这段代码有什么问题。 文件已添加到CMakeLists文件的源列表中。我有另一种来自WiFiManager的方法,它的工作正确。 我认为这是匿名lambda函数中的语法错误,但无法理解什么是正确的语法。