statique vs non-statique des variables dans l'espace de noms

J'ai un espace de noms foo qui contient un entier bar, a déclaré alors...

foo.h:

namespace foo {
    int bar;
}

Maintenant, si je comprend foo.h dans un seul fichier, cela fonctionne bien. Mais un problème se pose lorsque je inclure foo.h à partir de deux fichiers ou plus: j'obtiens une erreur de l'éditeur de liens. J'ai compris que si je déclare bar comme static, je peux inclure foo.h dans plus d'un fichier. Cela me semble étrange, car je n'étais pas au courant que l'on peut déclarer une variable statique à l'intérieur d'un espace de noms. (qu'est que cela veut dire?)

Pourquoi ce travail? Et surtout, pourquoi n'est pas il travail sans static? Ce n' static dire lorsqu'utilisé dans une namespace?