2011-07-05 4 views
2

Я пытаюсь запустить простой пример лямбда.Проблема с компиляцией простой C++ 0x программы с lambdas

// 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

@Marlon: Конечно, признак нерешительности! –

+0

Также известен некоторыми как «стоящее» пространство имен :( –

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

или, возможно, лучше

auto f2 = [] (int x, int y) { return x + y; }; 
+1

Проклятье: прошло минуточное окно, в котором я мог бы спокойно украсть эту хорошую идею. –

+0

Стоит помнить, что эти две альтернативы совершенно разные. –

+0

Lambdas, которые ничего не захватывают, также неявно конвертируемые в указатели на функции. –

0

Она смотрит на меня, как вы забыли -std = C++ 0x.

Смежные вопросы