error LNK2019: Verweis auf nicht aufgelöstes externes Symbol & error LNK1120
-
Hallo,
ich bekomme immer den oben genannten Linker-Error.
Es liegt (indirekt) an dem Aufruf a.show(mainWindow() in der Game.cpp-ShowSplashScreen(), doch ich komme einfach nicht darauf, was falsch ist.Folgender Code:
#pragma once #include <SFML\Window.hpp> #include <SFML\Graphics.hpp> class Game { public: void Start(); private: bool isExiting(); void gameLoop(); void ShowSplashScreen(); void ShowMenu(); enum GameState { Uninitialized, ShowingSplash, Paused, ShowingMenu, Playing, Exiting }; GameState gameState; sf::RenderWindow mainWindow; };
. . . void Game::ShowSplashScreen() { SplashScreen s; s.Show(mainWindow);//Kommentiere ich diese Stelle aus, wird kompiliert. gameState = Game::ShowingSplash; } . . .
#pragma once #include <SFML\Graphics.hpp> class SplashScreen { public: void Show(sf::RenderWindow& window); };
#include "SplashScreen.hpp" void SplashScreen::Show(sf::RenderWindow& window) { sf::Texture texture; if(texture.loadFromFile("/images/SplashScreen.png") != true) return; sf::Sprite sprite(texture); window.draw(sprite); window.display(); sf::Event e; while(true) { while(window.pollEvent(e)) //Zunächst überflüssig! { if(e.type == sf::Event::EventType::Closed || e.type == sf::Event::EventType::MouseButtonPressed || e.type == sf::Event::EventType::KeyPressed) { return; } } } }
-
Achja, die Bibliotheken sind alle korrekt gelinkt. Es muss an dem Quellcode liegen.
-
Deine Fehlermeldung ist nicht vollständig. Welches Symbol wird nicht gefunden?
Speedy_92-Gast schrieb:
Achja, die Bibliotheken sind alle korrekt gelinkt.
Unwahrscheinlich, denn die Fehlermeldung besagt gerade, dass dies nicht so ist. Entweder fehlt das genannte Symbol im Quellcode oder es wird nicht dazu gelinkt. Die Fehlermeldung stammt vom Linker, der Compiler hat da schon lange Feierabend.
-
Hier die unveränderte Fehlerausgabe:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall SplashScreen::Show(class sf::RenderWindow &)" (?Show@SplashScreen@@QAEXAAVRenderWindow@sf@@@Z)" in Funktion ""private: void __thiscall Game::ShowSplashScreen(void)" (?ShowSplashScreen@Game@@AAEXXZ)". C:\Users\Florian\Visual Studio 2012\Projects\Pang\Pang\Game.obj Pang
Fehler 2 error LNK1120: 1 nicht aufgelöste Externe C:\Users\Florian\Visual Studio 2012\Projects\Pang\Debug\Pang.exe Pang
Im Release-Mode sieht die 1. Ausgabe so aus:
Fehler 1 error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall SplashScreen::Show(class sf::RenderWindow &)" (?Show@SplashScreen@@QAEXAAVRenderWindow@sf@@@Z)". C:\Users\Florian\Visual Studio 2012\Projects\Pang\Pang\Game.obj Pang
Ich habe alle sfml-Bibliotheken gelinkt, die es nur gibt.
-
Speedy_92-Gast schrieb:
Ich habe alle sfml-Bibliotheken gelinkt, die es nur gibt.
Du meinst aber schon nur von einer Konfiguration (Static oder Dynamic, Release oder Debug)? Schreib mal die Liste der Bibliotheken hin, die du deinem Linker übergibst.
Kompilierst du alle deine .cpp-Dateien mit?
-
Nexus schrieb:
Speedy_92-Gast schrieb:
Ich habe alle sfml-Bibliotheken gelinkt, die es nur gibt.
Du meinst aber schon nur von einer Konfiguration (Static oder Dynamic, Release oder Debug)? Schreib mal die Liste der Bibliotheken hin, die du deinem Linker übergibst.
Kompilierst du alle deine .cpp-Dateien mit?
Dies ist die Liste:
sfml-audio.lib sfml-graphics.lib sfml-main.lib sfml-network.lib sfml-system.lib sfml-window.lib
Ich habe herumprobiert und wenn ich die Implementierung von SplashScreen::Show direkt in der Header-Datei vornehme, wird es ohne Probleme kompiliert und läuft?!
-
Vielen Dank.
Dank deiner Frage habe ich mir die Einstellungen der SplashScreen.cpp angeschaut und komischerweise war sie vom Elementtyp C/C++-Header. Habe es auf C/C++-Compiler gestellt und schon funktionierts.