Witam,
Przeszukałem już całe forum, widziałem podobne przypadki ale ciągle nie znalazłem ani odpowiedzi dlaczego dzieje się tak jak dzieje oraz jak wyjść z tej kłopotliwej sytuacji.
Wiem, że to w programowaniu obiektowym nieco nieeleganckie ale potrzebuję mieć globalny obiekt będący niejako listą innych zmiennych (wczytywanych z pliku konfiguracyjnego). Pracuję na kilku plikach i mam problem:
Jeżeli zadeklaruję w jednym pliku obiekt globalny jako statyczny to ładnie mi się skompiluje, mogę wykorzystać go w innym pliku ALE modyfikując go lekko w jednym pliku nie dokonuję jednocześnie modyfikacji w innym. Gdzieś przeczytałem, że zmienna globalna zadeklarowana jako statyczna jakoś ogranicza zasięg tej zmiennej tylko do tego pliku? Pomyślałem - musi ona zostać zadeklarowana jako globalna ale niestatyczna. Niestety powoduje to błędy kompilacji typu:
Błąd 1 error LNK2005: "class VAR varlist" (?varlist@@3VVAR@@A) already defined in bsio.obj D:\Documents\Visual Studio 2010\Projects\Battleship\Battleship\core.obj Battleship
Dodam jeszcze, że używam komend #define, #ifdef, #endif w celu uniknięcia redefinicji jakiegoś obiektu oraz nie widzę żadnej różnicy czy używam extern czy nie. Pomijając fakt że nie powinienem używać zmiennych globalnych to jak to poprawnie powinno być napisane?