【问题标题】:How to get lambda functions not working on gcc 5+ [closed]如何让 lambda 函数在 gcc 5+ 上不起作用 [关闭]
【发布时间】:2017-01-16 17:14:50
【问题描述】:

我正在尝试在我的 linux 机器(运行 gcc 版本 5.4.0)上的 c++ 中使用一个非常简单的 lambda 函数,但出现错误。

代码如下:

#include <iostream>               

int main()                 
{                        
  auto sayHello = [](int a, int b) -> int      
  {     
    return a + b;           
  }; 

  sayHello(55, 66);    
  return 0;    
}

g++ main.cpp -o listener &amp;&amp; ./listener -std=c++11

这在 Windows 上的 Visual Studio 中有效,但即使 lambdas 是 supported on gcc 4.5 and higher 我得到错误:

main.cpp: In function ‘int main()’:      
main.cpp:5:8: error: ‘sayHello’ does not name a type     
   auto sayHello = [](int a, int b) -> int    
        ^              
main.cpp:10:12: error: ‘sayHello’ was not declared in this scope     
   sayHello(); 

谁能告诉我如何解决这个问题?谢谢

【问题讨论】:

  • 如果您阅读链接的问题和答案,您会注意到他们提到了-std=c++11 标志。弄清楚它的作用作为练习。
  • 我建议关闭,因为这是一个微不足道的错字/错误。
  • @Walter 我认为这是个好主意。

标签: c++ gcc lambda


【解决方案1】:

您需要将-std=c++11 作为g++ 的标志之一:

g++ -std=c++11 main.cpp -o listener && ./listener 

现在,您将它作为./listener 可执行文件的标志传递。

【讨论】:

  • 或者更好的是-std=c++14或我个人最喜欢的-std=c++1z
  • sayHello(3,4) as sayHello 需要 int
  • @user1438832 是的!错字对不起。
  • @DeiDei 我建议不要在生产代码中使用临时标准版本。如果标准委员会改变了方向(就像他们对 fold 表达式所做的那样),那么 1z 等版本的行为可能与新提议的标准不同(就像 fold 表达式和 gcc/clang 确实发生的那样)。
【解决方案2】:

我不确定这是否是原因,但在您的命令中,您在错误的位置添加了 -std=c++11。它应该是 gcc 的参数。

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 2013-08-15
    • 2021-03-29
    • 1970-01-01
    • 2011-08-15
    • 2022-12-19
    • 1970-01-01
    • 2016-07-17
    相关资源
    最近更新 更多