2011-08-15 45 views
6

我正在用G ++試驗一些新的C++ 0x功能。 Lambdas,auto,其他新功能像魅力一樣工作,但基於範圍的for-loop無法編譯。這是程序我測試:G ++不能編譯C++ 0x範圍爲循環

#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> data = { 1, 2, 3, 4 }; 

    for (int datum : data) 
    { 
     std::cout << datum << std::endl; 
    } 
} 

我編譯它:

g++ test.cpp -std=c++0x 

我也試過gnu++0x,但輸出是一樣的。

這是輸出:

test.cpp: In function ‘int main()’: 
test.cpp:8:21: error: expected initializer before ‘:’ token 
test.cpp:12:1: error: expected primary-expression before ‘}’ token 
test.cpp:12:1: error: expected ‘;’ before ‘}’ token 
test.cpp:12:1: error: expected primary-expression before ‘}’ token 
test.cpp:12:1: error: expected ‘)’ before ‘}’ token 
test.cpp:12:1: error: expected primary-expression before ‘}’ token 
test.cpp:12:1: error: expected ‘;’ before ‘}’ token 

在此先感謝您的幫助。

編輯:我正在使用GCC版本4.5.2,我現在看到它太舊了。

+2

? – pmr

回答

14

您需要GCC 4.6及以上版本才能獲取基於範圍的循環。

GCC's C++0x status

$ cat for.cpp 
#include <iostream> 
int main() 
{ 
    for (char c: "Hello, world!") 
    std::cout << c; 
    std::cout << std::endl; 
    return 0; 
} 
$ g++ -std=c++0x -o for for.cpp 
$ ./for 
Hello, world! 
$ g++ --version 
g++ (GCC) 4.6.1 20110325 (prerelease) 
您正在使用哪個gcc版本
+0

謝謝!我發現這個版本不在我的Ubuntu版本庫中,所以我想我可能需要手動安裝它。 – rovaughn