= [](const int a, const int b) -> int {
return a + b;
}
А можно ткнуть носом что тут не так? Вроде совпадают типы
Здесь всё в порядке. Не бери в голову
А ругается error: expected expression before '[' token это вот про квадратные скобки и error: expected identifier before 'int' это вот про -> int. Это уже надо гуглить как лямбдами пользоваться?
У тебя какой стандарт в компиляторе?
А как это выяснить? Сделал gcc -dM -E. Вот что вышло (то, что интересно вроде) #define __GNUC__ 9 #define __STDC__ 1 #define __STDC_VERSION__ 201710L Вот __STDC_VERSION__ и есть?
Ну вообще, достаточно посмотреть версию компилятора и поддерживает ли она нужный стандарт. А так, если ты при компиляции пишешь g++ -std=c++11 file.cpp, то пример выше работать должен
Он пытается лямбды запустить, значит С++
Наверное дело было в том, что скармливал это Си. Запустил g++ ругается на error: cannot convert '<lambda(int, int)>' to 'int (**)(int, int)' in initialization
Где ты двойной указатель сделать умудрился... Покажи
Ну вот типы то как раз тут не очень совпадают. Лямбда имеет, вообще говоря, неспецифицированный тип По идее компилятор должен скастить её к указателю на функцию, но тот же msvc так вроде не может Можно явно попробовать сказать: +[] (...) { ... } Но это из разряда эзотерики
Я погугли немного. Вроде они и в Си есть, нет?
Всё здесь должно работать имплиситли
Да, умудрился. Вижу теперь) typedef int (*addIntFunction) (const int a, const int b); addIntFunction* f = [](const int a, const int b) -> int { return a + b; }
Ну в последнем объявлении убери
Заработало, ура! Спасибо!)
Обсуждают сегодня