• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C++ problem z linkerem

Object Storage Arubacloud
0 głosów
243 wizyt
pytanie zadane 9 kwietnia 2021 w C i C++ przez michal100032 Początkujący (390 p.)
zamknięte 9 kwietnia 2021 przez michal100032

Witam, jestem relatywnie nowy w c++ i robię prostą grę 2D przy pomocy SDL2. 

Po utworzeniu klasy GameObject oraz dodaniu namespace'a globals, który w zamyśle ma przechowywać zmienne, które mają być dostępne wszystkim, wyświetliła mi się masa błędów związanych z konsolidatorem:

dane wyściowe:

1>Debug\GameObject.obj : warning LNK4042: obiekt określono więcej niż raz; dodatkowe wystąpienia zostały zignorowane
1>Game.obj : error LNK2001: nierozpoznany symbol zewnętrzny "private: static class std::vector<class GameObject *,class std::allocator<class GameObject *> > GameObject::_gameObjects" (?_gameObjects@GameObject@@0V?$vector@PAVGameObject@@V?$allocator@PAVGameObject@@@std@@@std@@A)
1>GameObject.obj : error LNK2001: nierozpoznany symbol zewnętrzny "private: static class std::vector<class GameObject *,class std::allocator<class GameObject *> > GameObject::_gameObjects" (?_gameObjects@GameObject@@0V?$vector@PAVGameObject@@V?$allocator@PAVGameObject@@@std@@@std@@A)
1>Game.obj : error LNK2001: nierozpoznany symbol zewnętrzny "class RenderWindow * window" (?window@@3PAVRenderWindow@@A)
1>  Wskazówki dla symboli, które są zdefiniowane i mogą potencjalnie pasować:
1>    "class RenderWindow * globals::window" (?window@globals@@3PAVRenderWindow@@A)

Kod na githubie: https://github.com/michal100032/gra_w_cpp_nie_dziala

Przez długi czas nie byłem w stanie rozwiązać tego problemu ani znaleźć odpowiednich informacji.
Pozdrawiam i dziękuję za wszelką pomoc

komentarz zamknięcia: Problem został rozwiązany dzięki odpowiedzi użytkownika tangarr
komentarz 9 kwietnia 2021 przez tangarr Mędrzec (154,860 p.)
Jak to kompilujesz?
komentarz 9 kwietnia 2021 przez michal100032 Początkujący (390 p.)
Korzystam z VS 2019, wciskam po prostu F5; pracuję w konfiguracji Debug x86, C++ 14; nic więcej nie wiem
komentarz 9 kwietnia 2021 przez tangarr Mędrzec (154,860 p.)
W repozytorium nie ma twoich plików projektowych.
Bez nich nie wiadomo, które pliki są dodane do projektu ani jakie masz ustawienia linkera.
komentarz 9 kwietnia 2021 przez michal100032 Początkujący (390 p.)
Już wrzuciłem cały projekt na mastera
komentarz 9 kwietnia 2021 przez tangarr Mędrzec (154,860 p.)
Naucz się obsługi pliku .gitignore.
Zawsze powinieneś dodawać do niego pliki i katalogi, które nie powinny iść do repozytorium (np. katalog budowania, pliki konfiguracyjne z wrażliwymi danymi)

1 odpowiedź

+1 głos
odpowiedź 9 kwietnia 2021 przez tangarr Mędrzec (154,860 p.)
wybrane 9 kwietnia 2021 przez michal100032
 
Najlepsza
1>Debug\GameObject.obj : warning LNK4042: obiekt określono więcej niż raz; dodatkowe wystąpienia zostały zignorowane

To ostrzeżenie jest prawdopodobnie spowodowane tym, że plik GameObject\GameObject.hpp znajduje się w plikach źródłowych a nie w plikach nagłówkowych

1>Game.obj : error LNK2001: nierozpoznany symbol zewnętrzny "private: static class std::vector<class GameObject *,class std::allocator<class GameObject *> > GameObject::_gameObjects" (?_gameObjects@GameObject@@0V?$vector@PAVGameObject@@V?$allocator@PAVGameObject@@@std@@@std@@A)
1>GameObject.obj : error LNK2001: nierozpoznany symbol zewnętrzny "private: static class std::vector<class GameObject *,class std::allocator<class GameObject *> > GameObject::_gameObjects" (?_gameObjects@GameObject@@0V?$vector@PAVGameObject@@V?$allocator@PAVGameObject@@@std@@@std@@A)

Statyczna zmienna GameObjects::_gameObjects jest zadeklarowana ale nie została nigdzie zdefiniowana.

1>Game.obj : error LNK2001: nierozpoznany symbol zewnętrzny "class RenderWindow * window" (?window@@3PAVRenderWindow@@A)
1>  Wskazówki dla symboli, które są zdefiniowane i mogą potencjalnie pasować:
1>    "class RenderWindow * globals::window" (?window@globals@@3PAVRenderWindow@@A)

Usuń linijkę

extern RenderWindow* window;

z pliku Game.cpp, załaduj w nim nagłówek globals.hpp i zacznij używać w kodzie zmiennej globals::window zamiast window

komentarz 9 kwietnia 2021 przez michal100032 Początkujący (390 p.)
wielkie dzięki!

Podobne pytania

0 głosów
0 odpowiedzi 133 wizyt
+1 głos
0 odpowiedzi 162 wizyt
pytanie zadane 2 sierpnia 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
2 odpowiedzi 173 wizyt
pytanie zadane 28 maja 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...