使用Lambda函数作为参数时,C ++编译器中的奇怪行为

时间:2016-10-17 10:04:40

标签: c++ c++11 lambda arduino

我对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函数中的语法错误,但无法理解什么是正确的语法。

0 个答案:

没有答案