2012-02-06 46 views
6

C++ 11 tiêu chuẩn 8.5.4 ví dụ cho danh sách initializtion nói:khởi biên dịch lỗi

std::map<std::string,int> anim = { {"bear",4}, {"cassowary",2}, {"tiger",7} }; 

Nhưng tôi đã cố gắng VC10, gcc 4.6 và Comeau, không ai trong số những trình biên dịch sẽ cho phép này vượt qua? Tại sao vậy ?

+4

Tiêu chuẩn C++ 11 là rất mới, không phải tất cả các trình biên dịch và các thư viện hỗ trợ tất cả mọi thứ được nêu ra. –

+6

GCC 4? 5, 4.6 và 4.7 biên dịch nếu bạn chỉ định '-std = C++ 0x'. – Mat

+0

[Hoạt động] (http://ideone.com/37oqu) cho tôi trên gcc 4.5.1. Lỗi mà bạn nhận được là gì? Có lẽ bạn chưa bật '-std = C++ 0x'? –

Trả lời

3

Cảm ơn tất cả các câu trả lời trong các nhận xét.

Sau đó tôi đã kiểm tra lại C++ 98 và 03 chuẩn và yea, 8.5.4 chắc chắn là một giây mới trong C++ 11! Đó là lý do tại sao nó không được hỗ trợ đầy đủ bởi tất cả các trình biên dịch.

Sau khi thêm cờ -std = C++ 0x với gcc 4.6.1 bây giờ việc biên dịch này sẽ tốt.

Thêm mã thử nghiệm cho bất cứ điều gì những người có thể cần một tài liệu tham khảo:

#include <map> 
#include <string> 
#include <initializer_list> 
#include <iostream> 

using namespace std; 
int main() 
{ 
    std::map<std::string,int> collection = {{"bear",4}, {"cassowary",2}, {"tiger",7}}; 
    for(auto it: collection) 
     std::cout << it.first << " has value " << it.second << std::endl; 
    return 0; 
} 
+0

@TomGarske: cảm ơn lời nhắc nhở loại, chỉ đã làm :) – Gob00st

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