2015-01-15 142 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)的内容。

一些解释和示范错误来自哪里将不胜感激。

编辑: Lambda表达式需要C++ 11,我没有使用它。在[&]之后不需要()

+5

你用C++编译11? – Sean

+0

请提供一个完整的,最简单的例子来重现您的问题,以便我们自己编译它。 – AndyG

+1

哪个编译器和版本? –

回答

4
  1. 看来你是不是用C++ 11的支持编译启用,即-std=c++11丢失,如果您正在使用clanggcc

  2. 括号定义如何拉姆达外变量被捕获。即[&]使其通过引用捕获变量,[=]复制您访问的每个变量。

至于lambda表达式参考和他们的捕获列表,你可以使用Lambda functions

+1

在OP使用的情况下,Visual Studio [自2010版以来](http://msdn.microsoft.com/zh-cn/library/dd293603(v = vs.100).aspx)也支持Lambda函数视觉工作室。知道他正在使用哪个编译器和版本会很高兴 –

相关问题