2013-03-31 3 views
13

sto facendo tutto correttamente, per quanto posso dire e ho ottenuto il messaggio di errore:C++ di errore: 'unordered_map' non nominare un tipo

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

Nel mio codice, ho:

#include <unordered_map> 

using namespace std; 

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

void main { 
    return; 
} 

non vedo che cosa può mancare qui ....

EDIT: quando aggiorno il mio dichiarazione

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

Sono in grado di eliminare il primo errore, ma quando provo a prenotare, ottengo ancora il secondo messaggio di errore.

EDIT2: Come sottolineato in basso, riserva deve andare in principale e ho bisogno di compilare con la bandiera

-std=c++0x 

Tuttavia, ci appaiono ancora errori relativi alla unordered_map, vale a dire:

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

fornire un ** completo ** esempio –

+0

Quale versione di quale compilatore stai usando? E con quali opzioni stai compilando il tuo codice? ** Ricorda che 'std :: unordered_map' è disponibile con C++ 11 **. – Nawaz

+0

g ++. Exe (g ++ sotto MinGW). la versione di gcc è 4.6.2. Quindi c'è un modo per me di usare unordered_map? Quando uso il namespace tr1, sono in grado di dichiarare la mia unordered_map ma quando provo a riservare spazio, ricevo comunque un errore. – user788171

risposta

13

Compilare con g++ -std=c++11 (la mia versione gcc è gcc 4.7.2) E

#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

Per GCC 4.6.2 che dovrebbe essere '-std = C++ 0x' –

+0

@JonathanWakely Grazie. Ho dimenticato di menzionare la mia versione g ++ – gongzhitaao

+0

Ah sì, errore stupido, l'istruzione di riserva deve essere all'interno di main() e ho bisogno di compilare con -std = C++ 0x flag per gcc 4.6.2. Sfortunatamente, sto riscontrando ancora alcune difficoltà con unordered_map, sto ottenendo: errore: 'class std :: tr1 :: unordered_map , int>' non ha alcun membro chiamato 'reserve' – user788171

3

Non è possibile execute arbitrary expressions at global scope, così si dovrebbe mettere

mymap.reserve(7000); 

all'interno principale.

Questo vale anche per altri contenitori STL come la mappa e il vettore.

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.