2017-01-16 63 views
1

我想在我的linux机器上运行C++中非常简单的lambda函数(运行gcc版本5.4.0),但出现错误。如何获得lambda函数不能在gcc上工作5+

下面是代码:

#include <iostream>    

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

    sayHello(55, 66);  
    return 0;  
} 

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

这个工程在Visual Studio中的窗口,但是,即使lambda表达式是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(); 

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

+0

如果您阅读链接的问题和答案,您会注意到他们提到了“-std = C++ 11”标志。弄清楚它作为一项练习留下了什么。 – molbdnilo

+0

我建议关闭,因为这是一个微不足道的错字/错误。 – Walter

+0

@沃尔特我认为这是一个好主意。 – Startec

回答

4

你需要把-std=c++11的标志之一g++

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

现在,你将它作为一个标志为./listener可执行文件。

+0

或者更好的是'-std = C++ 14'或者我个人最喜欢的'-std = C++ 1z'。 – DeiDei

+0

sayHello(3,4)如你所说要带到int – user1438832

+0

@ user1438832是的!错别字对不起。 – Startec

2

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