错误C3499:已指定具有void返回类型的lambda无法返回值

时间:2015-04-26 10:06:41

标签: c++ lambda unsatisfiedlinkerror

我正在使用以下lambda,我收到此错误。我无法弄清楚为什么编译器不喜欢我正在做的事情。

std::string captchaWord(6, 0);
std::generate(captchaWord.begin(), captchaWord.end(), []() {
    unsigned int num = Randomizer('z' - 'a' + 1 + '9' - '0' + 1);
    char ch = num + 'a';
    if (num >= 'z' - 'a' + 1)
    {
        ch += '0' - 'z' - 1;
    }
    return ch;
});

顺便说一句,Randomizer是一个具有以下签名的函数:

unsigned int Randomizer(unsigned int);

这是我收到的错误消息:

错误C3499:已指定具有void返回类型的lambda无法返回值。

2 个答案:

答案 0 :(得分:4)

您必须指定返回类型:

[]() -> char {
// your code;
}

自动推导仅在整个lambda仅包含单个return语句的 (在C ++ 11中)时才有效,否则,您需要指定类型。另请参阅lambda on cppreference上的文档。在C ++ 14中,规则允许在返回之前使用其他语句。

答案 1 :(得分:2)

根据当前标准C ++ 14,您的代码有效。但是在C ++ 11中,没有指定返回类型的lambda的返回类型为void,除非它的主体包含一个return语句。

您的编译器似乎不支持最新标准。要解决此问题,请指定返回类型:

[]()->char { .... }