2013-03-19 50 views
2

我想使用lambda排序數組以在比較函數中使用另一個數組。裏面一個大的功能,我有這樣的代碼:使用lambda錯誤的C++排序

std::sort(arr.begin(), arr.end(),[] (int& a, int& b) 
{  
    return (*i)[a] < (*i)[b]; 
}); 

我得到在包含函數以下錯誤:

mcmc.cpp:139: error: expected primary-expression before ‘[’ token 
mcmc.cpp:139: error: expected primary-expression before ‘]’ token 
mcmc.cpp:139: error: expected primary-expression before ‘int’ 
mcmc.cpp:139: error: expected primary-expression before ‘int’ 

編譯時,我包括-std =的C++ 0x選項以及。

我對發生了什麼感到困惑。出於某種原因,它似乎不認爲我的語法是有效的。爲了防萬一,我做了一個百勝的更新,但它似乎仍然不能識別使用lambda表達式。

+1

從你*我包括-std = C++ 0x選項*評論,我收集你使用的是G ++,所以問題是G ++究竟是哪個版本?並不是每個人都支持lambdas。請參閱http://gcc.gnu.org/projects/cxx0x.html(此頁面包含有關每個G ++版本的C++ 11兼容性的信息,我會定期查閱,但不知何故,該網站似乎現在已停用 - 請重試後來) – syam 2013-03-19 01:06:40

+0

看起來你在關閉參數後缺少一個paren。 – bchurchill 2013-03-19 01:08:22

+0

@syam我已經安裝了v 4.4.7 gcc。我認爲g ++只是運行gcc的cpp命令。我只是做了一個yum更新,所以我應該有最新的gcc。 – saccharine 2013-03-19 01:10:17

回答

8

C++ 11 lambda需要GCC/G ++ 4.5至少,它們不能用於G ++ 4.4。

請參閱http://gcc.gnu.org/projects/cxx0x.html(或者,因爲它現在正在運行,所以cached version)。

+0

謝謝。剛剛在SO上也找到了相關的問題。我認爲CentOS 6在gcc中會有lambda支持,但我猜不是。 – saccharine 2013-03-19 01:16:03

+0

@saccharine我對CentOS不是很瞭解,但是你可能會從一個「測試」版本庫而不是常規的「stable」版本庫中安裝一個更新的GCC版本(對於Debian的措辭感到抱歉;)你會明白我的觀點)。例如。我在Squeeze上運行g ++ 4.7和4.8(Debian stable,默認情況下爲GCC 4.4),只需要非常小的升級。 – syam 2013-03-19 01:19:52

+0

是與std :: addressof相同的問題?我使用的是g ++ 4.4,因爲CUDA需要它,但是我的程序沒有看到std :: addressof,我發現4.4文件中不存在,只有我的4.7 dirs – 4pie0 2013-03-19 01:24:13