Arduino lambdas'没有合适的转换函数'错误

时间:2017-01-15 23:01:17

标签: c++ lambda arduino

我有一个使用lambas的小型Arduino项目:

typedef void(*keyboardKeyDelegate)(int);

void KeyboardKeyChange(int button, keyboardKeyDelegate onKeyChange);
void KeyboardKeyChange(int button, keyboardKeyDelegate onKeyChange)
{
    // code...
}

void KeyboardKeyClick(int button, keyboardKeyDelegate onClick);
void KeyboardKeyClick(int button, keyboardKeyDelegate onClick)
{
    // code...
}

..下一个

bool r = true;
KeyboardKeyClick(KB_TOP, [&r](int state)
{
    r = !r;
    Serial.println("> KB_TOP CLICKED");
});

编译源代码时出错:

no suitable conversion function from "lambda []void (int state)->void" to "keyboardKeyDelegate" exists

也许有人对此错误了解更多,并帮助我弄明白。

1 个答案:

答案 0 :(得分:0)

你的lambda有状态,因此不能转换为函数指针,如函数参数。

你需要从lambda中删除状态并以某种方式恢复它,或者通过将其转换为模板来更改函数以接受任何可调用的函数。