2011-08-15 44 views
6

Tôi đã thử nghiệm một số tính năng C++ 0x mới với G ++. Lambdas, auto và các tính năng mới khác hoạt động như một nét duyên dáng, nhưng vòng lặp for-loop không thể biên dịch được. Đây là chương trình tôi đã thử nghiệm:G ++ không biên dịch C++ 0x dựa trên phạm vi cho vòng lặp

#include <iostream> 
#include <vector> 

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

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

tôi biên dịch nó với:

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

Tôi cũng đã cố gắng gnu++0x, nhưng sản lượng là như nhau.

Đây là kết quả:

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 

Cảm ơn trước sự giúp đỡ của bạn.

EDIT: Tôi đang sử dụng phiên bản GCC 4.5.2, hiện tôi thấy quá cũ.

+2

Phiên bản gcc bạn đang sử dụng? – pmr

Trả lời

14

Bạn cần GCC 4.6 trở lên để có phạm vi dựa trên vòng lặp.

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) 
+0

Cảm ơn bạn! Tôi thấy rằng phiên bản này không có trong kho lưu trữ Ubuntu của tôi, vì vậy tôi cho rằng tôi có thể cần phải cài đặt nó theo cách thủ công. – rovaughn

Các vấn đề liên quan