web-dev-qa-db-fra.com

Erreur C++: 'unordered_map' ne nomme pas un type

Je fais tout correctement dans la mesure où je peux dire et j'ai reçu le message d'erreur:

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

Dans mon code, j'ai:

#include <unordered_map>

using namespace std;

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

void main {
  return;
}

Je ne vois pas ce qui peut manquer ici ....

EDIT: quand je mets à jour ma déclaration à

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

Je suis capable d’éliminer la première erreur, mais quand j’essaie de réserver, j’obtiens toujours le deuxième message d’erreur.

EDIT2: Comme indiqué ci-dessous, la réserve doit aller dans main et je dois compiler avec flag 

-std=c++0x

Cependant, il semble toujours y avoir des erreurs liées à unordered_map, à savoir:

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

Compiler avec g++ -std=c++11 (ma version de gcc est gcc 4.7.2) ET

#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;
}
15
gongzhitaao

Vous ne pouvez pas execute arbitrary expressions at global scope, vous devriez donc mettre 

mymap.reserve(7000);

intérieur principal.

Ceci est également vrai pour d'autres conteneurs STL tels que map et vector.

3
taocp

Si vous souhaitez prendre en charge <unordered_map> pour les versions antérieures à c ++ 11, utilisez
#include<tr1/unordered_map> et déclarez vos cartes sous la forme: - std::tr1::unordered_map<type1, type2> mymap
qui utilisera l'extension du rapport technique 1 pour la compatibilité ascendante.

1
bismarc