2012-03-29 98 views
1

我試圖編譯下面的程序:我錯過了什麼?

#include<functional> 
#include<iostream> 

int main(int argc, char* argv[], char* env[]) { 
    std::function<int(int, int)> f = [i, &j] { return i + j; }; 
    std::cout << f(5, 5); 
} 

爲什麼我收到以下錯誤:

a.cc:17:3: error: \u2018function\u2019 is not a member of \u2018std\u2019 

即使我有「自動」的編譯器替換它抱怨說,「F」不會命名一個類型。我嘗試了GCC 4.4.3和4.6.2。

+2

這可能有所幫助:http://stackoverflow.com/questions/9408082/c11-gcc-4-6-2-stdmove。 – 2012-03-29 16:46:26

回答

6
std::function<int(int, int)> f = [i, &j] { return i + j; }; 

這是錯誤的語法。

你真正想要寫的是這樣的:

std::function<int(int, int)> f =[](int i, int j) { return i + j; }; 

或者,如果你想使用auto,則:

auto f =[](int i, int j) { return i + j; }; 

使用-std=c++0x選項使用gcc-4.6.2編譯這段代碼。

0

Polymorphic wrappers for function objects在C++ 11中是新的。要在支持C++ 0x(C++ 11草稿版本)的4.7之前的GCC安裝中使用這些功能,您需要使用-std=c++0x開關進行編譯(請參閱here)。

對於GCC v4.7,即切換到-std=c++11(請參閱here)。