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