2013-03-31 6 views
13

isim vermez 'unordered_map': Benim kodC++ hata: bir tür ben anlarım ve ben hata mesajı aldık şekilde doğru bildiğim kadarıyla her şeyi yapıyorum

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

, ben:

burada eksik olabilir görmüyorum
#include <unordered_map> 

using namespace std; 

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

void main { 
    return; 
} 

....

DÜZENLEME:

benim beyanı güncelleme
std::tr1::unordered_map<string,int> mymap; 

İlk hatayı ortadan kaldırabilirim, ancak ayırmaya çalıştığımda hala ikinci hata iletisini alıyorum.

EDIT2: Aşağıda belirttiği gibi, rezerv ana gitmek gerekir ve hala yani unordered_map ilgili hatalar olduğu görülmektedir,

-std=c++0x 

Ancak bayrağıyla derlemek gerekir:

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

bir ** tamamlayın ** örnek –

+0

Hangi sürümü hangi derleyici kullanıyorsunuz? Ve kodunuzu hangi seçeneklerle derliyorsunuz? ** Unutmayın ki 'std :: unordered_map' C++ 11 ** ile kullanılabilir. – Nawaz

+0

g ++ exe (gGW, MinGW altında). gcc sürümü 4.6.2'dir. Yani unordered_map kullanmam için bir yol var mı? Tr1 ad alanı kullandığımda unordered_map'imi bildirebiliyorum ancak yer ayırmaya çalıştığımda hala hata alıyorum. – user788171

cevap

13

Derleme g++ -std=c++11 ile (benim gcc sürüm gcc 4.7.2 olan) VE

#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

GCC 4.6.2 için '-std = C++ 0x' olmalıdır –

+0

@JonathanWakely Teşekkürler. G ++ sürüm – gongzhitaao

+0

Ah evet, aptal hata, rezerv deyimi ana() içinde olması gerekiyor ve gcc 4.6.2 için -std = C++ 0x bayrağı ile derlemem gerekiyor. Ne yazık ki, hala unordered_map ile bazı zorluklar yaşıyorum, alıyorum: error: 'class std :: tr1 :: unordered_map , int>' adında hiçbir üye yok 'rezerv' – user788171

3

Sen execute arbitrary expressions at global scope olamaz, bu nedenle ana içeride

mymap.reserve(7000); 

koymak gerekir.

Bu, harita ve vektör gibi diğer STL konteynerleri için de geçerlidir.

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.