无法在未指定捕获默认值的lambda中隐式捕获变量 我在C++的LAMBDAS上跟踪这个家伙的博客文章,编译代码时,我遇到了编译器错误: variable 'unit' cannot be implicitly captured in a lambda with no capture-default specified"

无法在未指定捕获默认值的lambda中隐式捕获变量 我在C++的LAMBDAS上跟踪这个家伙的博客文章,编译代码时,我遇到了编译器错误: variable 'unit' cannot be implicitly captured in a lambda with no capture-default specified",c++,macos,c++11,g++,c++14,C++,Macos,C++11,G++,C++14,它引用的行如下所示: auto unit = [](auto x) { return [=](){ return x; }; }; auto stringify = [](auto x) { stringstream ss; ss << x; return unit(ss.str()); }; auto unit=[](自动x){ return[=](){return x;}; }; 自动字符串化=[](自动x){ 细流ss; ss好了: auto

它引用的行如下所示:

auto unit = [](auto x) {
    return [=](){ return x; };
};
auto stringify = [](auto x) {
    stringstream ss;
    ss << x;
    return unit(ss.str());
};
auto unit=[](自动x){
return[=](){return x;};
};
自动字符串化=[](自动x){
细流ss;
ss好了:

auto unit = [](auto x) {
    return [=](){ return x; };
};
auto stringify = [unit](auto x) { // or '&unit
    stringstream ss;
    ss << x;
    return unit(ss.str());
};
auto unit=[](自动x){
return[=](){return x;};
};
自动字符串化=[unit](自动x){//或'&unit
细流ss;

ss他可能是在全局范围内写的(或者没有测试).
stringify
无法获得
单元的定义。
stringify
的默认捕获方法更改为reference,或者只是通过引用捕获
unit
应该可以让它编译,尽管这并不能保证正确的行为…@jaggedSpire,谢谢,这确实有帮助。我意识到错误不是来自对stringify的调用,而是来自另一个函数。我将用新代码和错误更新主帖子@MikeBell我想你在使用clang?gcc编译并链接它,clang输出与你在设置中给出的相同的错误消息。另外:你是否将lambdas移到了
main
函数中?你粘贴的代码不清楚。@jaggedSpire哦,哈哈,我没有意识到我的g++指向了clang。谢谢提醒。是的,lambdas a我们在主函数中。一旦我尝试使用真正的g++编译,我将返回这里。谢谢。这肯定允许现在调用stringify,并帮助我了解真正的问题所在。我将使用新代码和错误消息更新主帖子.我看不出您的代码有什么不同。看起来与中的代码完全相同OP@Black,请参阅第一段代码节选,在横线之前-即
提前感谢!:)
注释之前。
"__ZZZ4mainENK4$_17clINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEDaT_ENUlvE_C1ERKSA_", referenced from:
  std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > main::$_19::operator()<auto main::$_17::operator()<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const::'lambda'()>(auto main::$_17::operator()<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) const::'lambda'()) const in funwithlambdas-0f8fc6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [funwithlambdas] Error 1
auto unit = [](auto x) {
    return [=](){ return x; };
};
auto stringify = [unit](auto x) { // or '&unit
    stringstream ss;
    ss << x;
    return unit(ss.str());
};