2015-01-15 2 views
-2

Я пытаюсь заполнить вектор контейнер с объектами, используя std::generate функции стандартной библиотеки:Lambda вызывает ошибку компиляции

vector<className> table(20); 
    generate(table.begin(), table.end(), [&] { return className(); }); 

я получаю следующие ошибки:

Expected primary expression before '[' token. 
Expected primary expression before ']' token. 

Я знаю, что [&] добавлен чтобы получить ссылку на возвращаемый объект, но я не знаю, откуда взялись скобки (я видел это в нескольких примерах о том, как использовать generate).

Некоторое объяснение и демонстрация того, откуда исходит ошибка, будут оценены.

Редактировать: Лямбда-выражения требуют C++ 11, которые я не использовал. Нет необходимости в () после [&].

+5

Вы компиляции с C++ 11? – Sean

+0

Пожалуйста, предоставьте полный минимальный пример, который воспроизводит вашу проблему, чтобы мы могли ее скомпилировать самостоятельно. – AndyG

+1

Какой компилятор и версия? –

ответ

4
  1. Кажется, вы не компиляции с поддержкой C++ 11 включен, т.е. -std=c++11 отсутствует, если вы используете clang или gcc

  2. Скобки определяют как переменные вне лямбда захватываются. То есть [&] позволяет записывать переменные по ссылке, а [=] копирует каждую переменную, к которой вы обращаетесь.

В качестве сравнения для лямбды и их список захвата, вы можете использовать Lambda functions

+1

Лямбда-функции также поддерживаются в Visual Studio [с версии 2010 года] (http://msdn.microsoft.com/en-us/library/dd293603 (v = vs.100) .aspx), в случае использования OP Visual Studio. Было бы неплохо узнать, какой компилятор и версия он использует –

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