c++ - 错误 C3499 : a lambda that has been specified to have a void return type cannot return a value

标签 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;
});

顺便说一下,R​​andomizer 是一个具有以下签名的函数:

unsigned int Randomizer(unsigned int);

这是我收到的错误信息:

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

最佳答案

你必须指定返回类型:

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

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

关于c++ - 错误 C3499 : a lambda that has been specified to have a void return type cannot return a value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29876277/

相关文章:

android - 链接共享库 libGLES_mali.so 导致 dlopen 失败 : library "android.hardware...@1.0.so" not found in Android >= 7. 0

c++ - C++ 中的高效模板结构

c++ - 通过复制 include 目录的内容来安装 spdlog

c++ - 访问转换纹理的像素数据

node.js - Nodejs 全局变量的使用

java - 无法在 AMD 64 位平台 LWJGL 上加载 IA 32 位 .dll

java - 在 Docker 上运行 Java Swing GUI 应用程序

c++ - VC++ : KB971090 and selecting Visual C Runtime DLL dependencies

java - 为什么 foreach lambda 比其他 for 循环慢这么多?

c# - 从数据表查询时在 Lambda 表达式中使用 Let