Carte statique en tant que Membre de la Classe en C++

J'ai de la difficulté à l'aide d'une carte statique en tant que membre C++. Mon fichier d'en-tête est:

class Article
{
public:
//
static map<string,Article*> dictionary;
....
....   
};

Dans mon constructeur, j'appelle la suite de la méthode d'abord:

 void Article::InitializeDictionary()
 {
   #ifndef DICT
   #define DICT
   map<string,Article*> Article::dictionary;
   #endif
 }

Basée sur d'autres posts sur ce que je suis censé déclarer le membre statique mais quand j'essaie de faire cela, j'obtiens l'erreur suivante:

Error   1   error C2655: 'Article::dictionary' : definition or redeclaration illegal in current scope   c:\.......\article.cpp  88  1

Si je change de fonction à la suivante:

void Article::InitializeDictionary()
{
    #ifndef DICT
    #define DICT
    Article::dictionary["null"] = 0;
    #endif
}

J'obtiens cette erreur:

Error   1   error LNK2001: unresolved external symbol "public: static class std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class Article *,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const ,class Article *> > > Article::dictionary" (?dictionary@Article@@2V?$map@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVArticle@@U?$less@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVArticle@@@std@@@2@@std@@A)

Toutes les idées sur ce que je peux faire?

Vous ne pouvez pas définir le membre statique dans une méthode
Si je le déclarer dans le fichier d'en-tête après la déclaration de la classe j'obtiens la même erreur.
double possible de Undefined reference to membre de classe statique

OriginalL'auteur Kyle | 2013-10-12