• 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

0 głosów
609 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 (155,120 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 (155,120 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 (155,120 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 (155,120 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 259 wizyt
+1 głos
0 odpowiedzi 302 wizyt
pytanie zadane 2 sierpnia 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
+1 głos
2 odpowiedzi 419 wizyt
pytanie zadane 28 maja 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

93,772 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,375 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...