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'
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;
}
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.
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.