Linkerfehler SFML



  • Hi, möchte ein einfaches Fenster ausgeben mit der SFML. Der Code muss richtig sein aber zur Vorsicht poste ich nochmal:

    #include <iostream>
    #include <SFML/Graphics.hpp>
    
    using namespace std;
    
    int main (int argc, char* argv[]) {
    
    	sf::RenderWindow window (sf::VideoMode (500, 500), "Zup", sf::Style::Titlebar);
    
    	while (window.isOpen()) {
    		window.clear();
    		window.display();
    	}
    
    return 0;
    }
    

    Fehleranzeige:

    sfml-window-s-d.lib(Window.cpp.obj) : error LNK2038: Konflikt ermittelt für "_MSC_VER": Der Wert "1700" stimmt nicht mit dem Wert "1600" in game.obj überein.
    

    Habe gegoogelt und jmd gefunden der das selbe Problem hatte und es gelöst hat. Mit der Lösung komme ich allerdingsn icht klar:

    "Autsch dumme Frage. Problem gelöst. Habe alles auf MD gestellt."

    Plz help!



  • Die SFML Library wurde mit einem anderen Compiler gebaut als du verwendest.
    => Entweder SFML selbst bauen oder passende Version für deinen Compiler runterladen.



  • Wo kriege ich nen passenden compiler her? auf der sfml seite ist nichts zu finden. benutze visual c++ 2010



  • AnfängerPlusPlus schrieb:

    Wo kriege ich nen passenden compiler her? auf der sfml seite ist nichts zu finden.

    *patsch*
    Ich hab geschrieben passende Version für deinen Compiler runterladen. Nicht passenden Compiler runterladen.

    AnfängerPlusPlus schrieb:

    benutze visual c++ 2010

    Korrekt.
    Du hast aber die SFML Version für Visual Studio 2012 runtergeladen. Und nu rate mal warum es nicht geht und was du tun musst damit es dann doch funktioniert.



  • Danke für die Antwort. Aber irgendwie stimmt noch was nicht...

    main.cpp :

    #include <SFML\Graphics.hpp>
    #include "game.h"
    
    int main () {
    
    		game cyberpong;
    	cyberpong.init ();
    
    	while (cyberpong.isrunning())  {
    		cyberpong.run();
    	}
    
    return 0;
    }
    

    game.hpp :

    #include <SFML\Graphics.hpp>
    #include "game.h"
    
    int main () {
    
    		game cyberpong;
    	cyberpong.init ();
    
    	while (cyberpong.isrunning())  {
    		cyberpong.run();
    	}
    
    return 0;
    }
    

    game.cpp :

    #include <SFML\Graphics.hpp>
    #include "game.h"
    
    game::game ()
    {
    	window.create (sf::VideoMode(200,200), "Konstruktor");
    }
    
    void game::init () {
    	running = true;
    }
    
    void game::run (){
    	while (window.isOpen()) {
    		sf::Event event;
    		while (window.pollEvent(event)) {
    			if (event.type == sf::Event::Closed)
    				window.close ();
    		}
    		window.clear ();
    		window.display ();
    	}
    }
    
    bool game::isrunning () {
    	return running;
    }
    

    Fehlermeldung:

    1>------ Erstellen gestartet: Projekt: SFML, Konfiguration: Release Win32 ------
    1>  game.h
    1>  main.cpp
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: bool __thiscall game::isrunning(void)" (?isrunning@game@@QAE_NXZ)".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall game::run(void)" (?run@game@@QAEXXZ)".
    1>main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __thiscall game::init(void)" (?init@game@@QAEXXZ)".
    1>c:\users\ohara\documents\visual studio 2010\Projects\SFML\Release\SFML.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
    


  • Ups das ist die game.hpp :

    #ifndef game_hpp
    #define game_hpp
    
    #include <SFML\Graphics.hpp>
    
    class game {
    
    public:
    
    	void init ();
    	void run ();
    	bool isrunning ();
    
    	bool running;
    	sf::RenderWindow window;
    };
    


  • Du musst nur Aufmerksam den Output vom Compiler angucken. Nicht nur die Fehlermeldungen, sondern z.B. auch was in Zeile 2 steht.

    Dein grösster Feind ist deine Schluderigkeit. Die falsche SFML Version runtergeladen, der ursprünglich falsch gepostete Inhalt der game.h , das fehlende #endif , die Files im falschen Project-Folder, die mehrfache Behauptung dass das File game.hpp hiesse, wo es doch game.h heisst...
    Das musst du dir abgewöhnen. Wenn du das nicht auf die Reihe bekommst, dann sehe ich schwarz was Programmieren angeht.



  • game.cpp zum Projekt hinzufügen und mitkompilieren / linken lassen.



  • "Wenn du das nicht auf die Reihe bekommst, dann sehe ich schwarz was Programmieren angeht."

    Es gibt keinen Weg mehr zurück 😃

    Danke für die Antworten!



  • kleine Frage:

    Bei meiner letzten Frage, hatte es ein Problem gegeben , indem ich aus Versehen die main gelöscht hatte. sie war aber irgendwie nicht wirklich gelöscht. Ich konnte keine neue datei erstellen die main hieß, also hatte ich sie beim erstellen anders genannt und nach dem erstellen in main unbenannt. Meine Frage nun: Wenn die main nicht gelöscht war, müsste ich sie doch irgenwie wieder ins programm implementieren können. wie hätte ich das tun können?



  • Es ist egal wie die Source-Datei heisst, wo dein main drin ist - es muss nur vorhanden sein (in korrekter Form, natürlich).


Anmelden zum Antworten