Przestrzenie nazw w plikach *h

0

Pisze sobie mały programik.
W jednym z plików *.h definiuje sobie przestrzeń nazw.

#ifndef mojaprzestrzen_h
#define mojaprzestrzen_h

namespace mojaprzestrzen
{
	bool jakas_zmienna;
}

#endif
 

Wszystko było by ok, gdyby nie jedna rzecz.

Mam kilka plików *cpp. W kilku korzystam z tej samej przestrzeni nazw.

Includuje sobie ładnie pliczek mojaprzestrzen.h w każdym tym pliku *cpp.

#include "mojaprzestrzen.h"
 

Każdy plik *cpp ma swój plik *.h z deklaracjami funkcji w nim zawartych.
W głównym pliku programu *cpp (główny, rozumiem ten z funkcją int main) korzystam także z tej przestrzeni nazw, którą ładuje poprze zaincludowanie pliku mojaprzestrzen.h.
Z funkcji zawartych w innych plikach *.cpp także korzystam w pliku głównym, includując pliki *.h każdego pliku.

I teraz gdy includuje plik mojaprzestrzen.h w innych plikach *.cpp, oraz w pliku głównym cpp oraz pliki *.h innych plików *.cpp dostaje błąd podczas lnkowania:

 
error LNK2005: "mojaprzestrzen::zmienna" (?zmienna@mojaprzestrzen@@3_NA) already defined in jakisplikpoboczny.obj
fatal error LNK1169: one or more multiply defined symbols found
0

Zmienne muszą być extern a ich definicje znajdować się w osobnym pliku .cpp

1 użytkowników online, w tym zalogowanych: 0, gości: 1