2011-07-05 8 views
2

簡単なラムダの例を実行しようとしています。lambdaを使った単純なC++ 0xプログラムのコンパイルに問題がある

// lambda.cpp 
#include <functional> 
//#include <tr1/functional> 

int main() 
{ 
    // Assign the same lambda expression to a function object. 
    function<int (int, int)> f2 = [] (int x, int y) { return x + y; }; 
    //function<int (int, int)> f2 = [] (int x, int y) { return x + y; }; 
} 

私はこのようにそれをコンパイルしています:

$ g++ -std=c++0x -fpermissive lamdas.cpp 
lambdas.cpp: In function ‘int main()’:  
lambdas.cpp:10: error: expected primary-expression before ‘=’ token 
lambdas.cpp:10: error: expected primary-expression before ‘[’ token 
lambdas.cpp:10: error: expected primary-expression before ‘]’ token 
lambdas.cpp:10: error: expected primary-expression before ‘int’ 
lambdas.cpp:10: error: expected primary-expression before ‘int’ 
lambdas.cpp:10: error: expected ‘;’ before ‘{’ token 

は、どのように私はそれがエラーなしでコンパイルするのですか?

+11

'std :: function' –

+0

@Martinho:応答が失敗します。 –

+7

これはどのバージョンのGNU C++ですか?私はそれを綴る正しいソースファイル名を飛んで見たことがない! – sehe

答えて

5

std::functionを意味しましたか?

標準ライブラリの機能は、std名前空間に存在します。

あなたのコピー/ペーストが明らかに偽であることも面白いです。あなたは "lamdas.cpp"と書いて "lambdas.cpp"をコンパイルしました!

+0

彼はまた彼の最上部に 'lambda.cpp'を持っていますソースファイル!! – Marlon

+1

@マールロン:確かに決断の兆し! –

+0

"stood"名前空間としても知られています:( –

2
std::function<int (int, int)> f2 = [] (int x, int y) { return x + y; }; 

または、

おそらくより良い
auto f2 = [] (int x, int y) { return x + y; }; 
+1

Dammit;それは私が静かにその良いアイデアを盗むことができる5分のウィンドウを過ぎています。 –

+0

2つの選択肢が全く違っていることを覚えておいてください。 –

+0

何もキャプチャしていないLambdasもあります。暗黙的に関数ポインタに変換可能 –

0

あなたは-std = C++ 0xのを忘れてしまったように私には見えます。

関連する問題