2013-03-31 40 views
13

tôi đang làm tất cả mọi thứ một cách chính xác như xa như tôi có thể nói và tôi đã nhận được thông báo lỗi:C++ lỗi: 'unordered_map' không tên một loại

error: 'unordered_map' does not name a type 
error: 'mymap' does not name a type 

Trong mã của tôi, tôi có:

#include <unordered_map> 

using namespace std; 

//global variable 
unordered_map<string,int> mymap; 
mymap.reserve(7000); 

void main { 
    return; 
} 

tôi không thấy những gì có thể thiếu ở đây ....

EDIT: khi tôi cập nhật tuyên bố của tôi để

std::tr1::unordered_map<string,int> mymap; 

Tôi có thể loại bỏ lỗi đầu tiên, nhưng khi tôi cố gắng đặt trước, tôi vẫn nhận được thông báo lỗi thứ hai.

EDIT2: Như đã chỉ ra dưới đây, dự trữ phải đi vào chính và tôi cần phải biên dịch với cờ

-std=c++0x 

Tuy nhiên, vẫn còn xuất hiện là lỗi liên quan đến unordered_map, cụ thể là:

error: 'class std::tr1::unordered_map<std::basic_string<char>, int>' has no member named 'reserve' 
+0

cung cấp ** hoàn chỉnh ** ví dụ –

+0

Bạn đang sử dụng phiên bản trình biên dịch nào? Và với những lựa chọn nào bạn đang biên dịch mã của mình? ** Hãy nhớ rằng 'std :: unordered_map' có sẵn với C++ 11 **. – Nawaz

+0

g ++. Exe (g ++ trong MinGW). Phiên bản gcc là 4.6.2. Vì vậy, có một cách để tôi sử dụng unordered_map? Khi tôi sử dụng không gian tên tr1, tôi có thể khai báo unordered_map của mình nhưng khi tôi cố gắng đặt chỗ, tôi vẫn gặp lỗi. – user788171

Trả lời

13

Compile với g++ -std=c++11 (phiên bản gcc của tôi là gcc 4.7.2) VÀ

#include <unordered_map> 
#include <string> 

using namespace std; 

//global variable 
unordered_map<string,int> mymap; 

int main() { 
    mymap.reserve(7000); // <-- try putting it here 
    return 0; 
} 
+1

Đối với GCC 4.6.2 phải là '-std = C++ 0x' –

+0

@JonathanWakely Cảm ơn. Tôi quên đề cập đến phiên bản g ++ của tôi – gongzhitaao

+0

Ah có, lỗi ngu ngốc, câu lệnh dự trữ phải nằm bên trong main() và tôi cần biên dịch với cờ -std = C++ 0x cho gcc 4.6.2. Thật không may, tôi có một số khó khăn vẫn còn với unordered_map, tôi nhận được: lỗi: 'class std :: tr1 :: unordered_map , int>' không có thành viên có tên 'reserve' – user788171

3

Bạn không thể execute arbitrary expressions at global scope, vì vậy bạn nên đặt

mymap.reserve(7000); 

bên trong chính.

Điều này cũng đúng với các hộp chứa STL khác như bản đồ và vectơ.

0

If you want to support <unordered_map> for versions older than c++11 use
#include<tr1/unordered_map> and declare your maps in the form :- std::tr1::unordered_map<type1, type2> mymap
which will use the technical report 1 extension for backward compatibility.

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