erreur: c++ [carte] n'est pas le nom d'un type de

J'ai écrit ce qui suit dans le cadre d'un texte de commande de l'analyseur pour un jeu d'aventure texte.

Je suis d'essayer d'associer une chaîne de caractères entrée par un utilisateur à un élément dans un enum classe. La suite est dans mon fichier d'en-tête:

#include <iostream>
#include <map>
#include <string>
using namespace std;

enum class Noun
{
    //Interrogation subjects
    name,                   //ask the subject his name
    base,                   //where is the base?
    attack,                 //when will the attack be?

    invalid
};

map < string, Noun > knownNouns;
knownNouns["name"]      = Noun::name;
knownNouns["base"]      = Noun::base;
knownNouns["attack"]    = Noun::attack;

Noun parseNoun(string &noun)
{
    auto n = knownNouns.find(noun);
    if ( n == knownNouns.end() ) {
        return Noun::invalid;
    }
    return n->second;

Quand j'ai mis cela par le compilateur, je reçois le texte suivant:

nouns.h:46:1: error: 'knownNouns' does not name a type
 knownNouns["name"]      = Noun::name;
 ^
nouns.h:47:1: error: 'knownNouns' does not name a type
 knownNouns["base"]      = Noun::base;
 ^
nouns.h:48:1: error: 'knownNouns' does not name a type
 knownNouns["attack"]    = Noun::attack;
 ^
nouns.h: In function 'Noun parseNoun(std::string&)':
nouns.h:52:10: error: 'n' does not name a type
     auto n = knownNouns.find(noun);
          ^
nouns.h:53:10: error: 'n' was not declared in this scope
     if ( n == knownNouns.end() ) {
          ^
nouns.h:54:16: error: 'Noun' is not a class or namespace
         return Noun::invalid;
                ^
nouns.h:56:12: error: 'n' was not declared in this scope
     return n->second;
            ^

C'est ma première fois d'essayer d'utiliser les cartes et les énumérations, et je ne suis pas sûr de ce que je fait de mal. Je suis également pas terriblement familier avec l'utilisation de l'auto de vars, de sorte que c'est un peu de la cargaison-culte de la programmation de ma part. J'espère que j'ai compris sa mise en œuvre et l'erreur s'effacer une fois que j'résoudre la définition de type de problème, je vais avoir.

edit: C'est gênant. J'ai copier collé une erreur que j'avais déjà corrigé. le code ne compile pas quand (c'est à dire, le même problème se produit lorsque)

map < string, Noun > knownNouns;
knownNouns["name"]      = Verb::name;
knownNouns["base"]      = Verb::base;
knownNouns["attack"]    = Verb::attack;

est corrigée comme

map < string, Noun > knownNouns;
knownNouns["name"]      = Noun::name;
knownNouns["base"]      = Noun::base;
knownNouns["attack"]    = Noun::attack;
Vous devez mettre vos missions à l'intérieur d'une fonction.
J'ai compilé en c++11 compilateur, oui.
Galik, je suis à la recherche d'un exemple de ce que tu veux dire. Est-il une possibilité que vous connaissez un bon exemple de construction dans le chemin que vous avez décrit?
Voir @Oncaphillis réponse à ce que je veux dire. Ces lignes doivent être à l'intérieur d'une fonction.

OriginalL'auteur Bradley Evans | 2014-10-19