2017-01-16 3 views
1

Linuxマシン(gccバージョン5.4.0を実行中)でC++で非常に単純なラムダ関数を使用しようとしていますが、エラーが発生しています。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

これは、ラムダはsupported on gcc 4.5 and higherであっても、私はエラーを取得し、Windows上のVisual Studioで動作しますが、::

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

@Walter私はそれが素晴らしい考えだと思います。 – Startec

答えて

4

あなたがg++のフラグの一つとして-std=c++11を配置する必要があります。

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

今、あなたは./listener実行のためのフラグとしてそれを渡しています。

+0

あるいは '-std = C++ 14'や個人的に好きな' -std = C++ 1z'の方がいいです。 – DeiDei

+0

sayHello(3,4)sayHelloはintに受け取ります – user1438832

+0

@ user1438832はい!すみません。 – Startec

2

これが原因なのかどうかはわかりませんが、あなたのコマンドでは、-std = C++ 11を間違った場所に追加しています。それはgccのパラメータでなければなりません。

関連する問題