2015-01-15 166 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函數視覺工作室。知道他正在使用哪個編譯器和版本會很高興 –

相關問題