Unbehandelte Ausnahme - Header- & CPP-Datei



  • daddy_felix schrieb:

    carliman1412 schrieb:

    Es würde mich sehr freuen wenn ihr mir da weiter helfen könntet 🙂

    kommentiere mal ganz viel aus - bis die Fehlermeldung nicht mehr erscheint. Dann nimmst du den Code Stück für Stück wieder rein. So solltest du die fehlerhafte Stelle finden.

    Btw: Was ist "sf::String"? Bietet der irgendwelche Vorteile gegenüber std::string?

    Das auskommentieren hab ich ausprobiert. Sobald ich den Konstruktor schreibe gibt es die Fehlermeldung. Ich habe auch schon sf::string durch std::string ersetzt, hat aber nichts geholfen. Trotzdem Danke



  • Sone schrieb:

    Hast du es debuggt? In welcher Zeile tritt er auf? Der Debugger sollte dir eigentlich die Zeile angeben.

    Der Fehler tritt in der 4. Zeile auf. Also bei der geöffneten Klammer im Konstruktor



  • carliman1412 schrieb:

    Sone schrieb:

    Hast du es debuggt? In welcher Zeile tritt er auf? Der Debugger sollte dir eigentlich die Zeile angeben.

    Der Fehler tritt in der 4. Zeile auf. Also bei der geöffneten Klammer im Konstruktor

    wtf...
    Ist das ein Fehler in der Initialisierung des Strings? Wie rufst du den Ctor auf? Zeig mal.



  • Sone schrieb:

    carliman1412 schrieb:

    Sone schrieb:

    Hast du es debuggt? In welcher Zeile tritt er auf? Der Debugger sollte dir eigentlich die Zeile angeben.

    Der Fehler tritt in der 4. Zeile auf. Also bei der geöffneten Klammer im Konstruktor

    wtf...
    Ist das ein Fehler in der Initialisierung des Strings? Wie rufst du den Ctor auf? Zeig mal.

    Sorry. Ich meinte geschweifte Klammer auf.



  • So rufe ich den Konstruktor in der main.cpp auf:

    Object object("/img/objects.png");



  • zeig doch mal die gesamte main.cpp


  • Mod

    carliman1412 schrieb:

    Sorry. Ich meinte geschweifte Klammer auf.

    Das hat Sone schon verstanden. Ich wiederhole noch einmal: Der Fehler liegt ganz, ganz woanders. Eventuell sogar in sf::string. Was ist das überhaupt? Falls das eine Eigenkreation sein sollte, dann darfst du aus obigem "eventuell" ein "mit absoluter Sicherheit" machen.

    Zeig uns ein vollständiges Beispiel. Nochmal: Dritter Link in meiner Signatur. Du willst Hilfe. Wenn du uns Ratespielchen spielen lässt, liest in einer Stunde niemand mehr deine Threads.



  • sf::String ist von SFML und bietet automatische Unicode-Konvertierung, soweit ich weiß.



  • Wie wärs mal mit einem Debugger und einem Stacktrace? Dann müsstest du nicht mehr weiter rätselraten...



  • Hast du mal versucht in der Main das so aufzurufen?:
    sf::string blub("deinPfad");
    Object obj(blub);

    Kann mich da schwach erinnern das da so was war... weiß aber nicht ob es das war 😉

    PS: Zeig mal bitte wie du den in der Header deklariert hast 🙂



  • Nathan schrieb:

    sf::String ist von SFML und bietet automatische Unicode-Konvertierung, soweit ich weiß.

    Nicht ganz richtig. ein sf::String ist ein gerenderter String auf dem Bildschirm. Das hat mit std::string garnichts zu tun, weil std::string nur Zeichenketten speichert und sie nicht mit einem Font auf eine Textur rendern kann ...

    Ist also extrem schwachsinnig hier sf::String zu verwenden und das ganze funktioniert auch nur, weil sf::String implizit von std::string/char const* erzeugt werden kann und gecastet wird. Denn die Signatur von Texture::loadFromFile ist:

    bool loadFromFile (const std::string &filename, const IntRect &area=IntRect())
    

    Edit: Okay, seit Version 2.0 ist sf::String wirklich eine Stringklasse und die Renderklasse heißt sf::Text ... sorry.



  • Header-Datei:

    #include <SFML\Graphics.hpp>
    
    using namespace sf;
    
    class Object
    {
    public:
    	void Update(RenderWindow &window, float elapsedTime);
    	void Render(RenderWindow &window);
    	Object(sf::String tex);
    
    private:
    	float speed;
    	Texture texture;
    	Sprite sprite;
    	bool active;
    };
    

    min.cpp:

    #include <iostream>
    #include <windows.h>
    #include <random>
    #include <string>
    #include <vector>
    
    #include "object.h"
    
    #include <SFML/Graphics.hpp>
    
    using namespace sf;
    
    //Variables
    int winX=1024;
    int winY=700;
    
    bool running=true;
    bool started=true;
    bool spaceStarted=false;
    
    int imgID=0;
    
    int posX=80;
    int posY=winY/2;
    
    float accY=0;
    
    int life=100;
    
    Clock clock1;
    
    Object object("/img/objects.png");
    
    //voids
    void restartGame();
    void resetVariables();
    
    int main()
    {	
    	//Window
    	RenderWindow window(VideoMode(winX, winY, 32), "TheHelicopter", Style::Close);
    	window.setFramerateLimit(100);
    
    	std::cout << "loaded window" << std::endl;
    
    	//--------Spawn-Timer--------
    
    	//----------------
    
    	//--------Object-List--------
    
    	//----------------
    
    	//--------Fonts--------
    	Font agency;
    	agency.loadFromFile("AGENCYR.TTF");
    
    	std::cout << "loaded fonts" << std::endl;
    	//----------------
    
    	//--------Background--------
    	Texture texBackground;
    	texBackground.loadFromFile("img/background.png");
    
    	Sprite sprBackground;
    	sprBackground.setTexture(texBackground);
    	sprBackground.setPosition(0, 0);
    	sprBackground.setScale(17.5, 17.5);
    
    	std::cout << "loaded background" << std::endl;
    	//----------------
    
    	//--------Player--------
    	Texture texPlayers;
    	texPlayers.loadFromFile("img/players.png");
    
    	Sprite sprPlayer;
    	sprPlayer.setTexture(texPlayers);
    	sprPlayer.setTextureRect(IntRect(0, imgID*40, 120, imgID*20+40));
    	sprPlayer.setOrigin(60,20);
    	sprPlayer.setScale(1, 1);
    	sprPlayer.setPosition(posX, posY);
    
    	std::cout << "loaded player" << std::endl;
    	//----------------
    
    	//--------Player-Life-Bar--------
    	Texture texBarBack;
    	Texture texBar;
    	texBarBack.loadFromFile("img/bar.png");
    	texBar.loadFromFile("img/bar.png");
    
    	Sprite sprBarBack;
    	Sprite sprBar;
    	sprBarBack.setTexture(texBarBack);
    	sprBar.setTexture(texBar);
    	sprBarBack.setTextureRect(IntRect(0, 0, 100, 5));
    	sprBar.setTextureRect(IntRect(0, 5, life, 10));
    	sprBarBack.setOrigin(50, 3);
    	sprBar.setOrigin(50, 3);
    
    	std::cout << "loaded player-life-bar" << std::endl;
    	//----------------
    
    	//--------Object--------
    
    	//----------------
    
    	//--------Text--------
    	Text txtStart("Press Space to start!", agency, 100);
    	txtStart.setColor(Color(128,128,128));
    	txtStart.setOrigin(txtStart.getLocalBounds().width/2, txtStart.getLocalBounds().height/2);
    	txtStart.setPosition(winX/2,winY/2);
    
    	std::cout << "loaded text" << std::endl;
    	//----------------
    
    	std::cout << "game started" << std::endl;
    
    	while(running)
    	{
    		Event event;
    
    		float elapsedTime=clock1.restart().asMilliseconds();
    
    		while(window.pollEvent(event))
    		{
    			if(((event.type==Event::KeyPressed) && (event.key.code==Keyboard::Escape)) || event.type==Event::Closed)
    			{
    				running=false;
    			}
    
    		}
    
    		while(!spaceStarted)
    		{
    
    			if(Keyboard::isKeyPressed(Keyboard::Space))
    			{
    				spaceStarted=true;
    
    				std::cout << "space pressed" << std::endl;
    			}
    
    			while(window.pollEvent(event))
    			{
    				if(((event.type==Event::KeyPressed) && (event.key.code==Keyboard::Escape)) || event.type==Event::Closed)
    				{
    					spaceStarted=true;
    					running=false;
    				}
    			}
    
    			window.clear(Color(2, 0, 10));
    
    			window.draw(sprBackground);
    
    			window.draw(sprPlayer);
    
    			window.draw(sprBarBack);
    			window.draw(sprBar);
    			window.draw(txtStart);
    
    			window.display();
    		}
    
    		if(Keyboard::isKeyPressed(Keyboard::Space))
    		{
    			if(accY>-8){accY=accY-0.75;}
    		} 
    		else
    		{
    			if(accY<16){accY=accY+0.25;}
    		}
    
    		if(posY-20<35)
    		{
    			life=life+(accY*(std::rand()%2+4));
    			accY=0-accY;
    		}
    		if(posY+20>winY-35)
    		{
    			life=life-(accY*(std::rand()%2+4))/2;
    			accY=0-accY+4;
    		}
    
    		if(life<0)
    		{
    			std::cout << "player died" << std::endl;
    
    			restartGame();
    			resetVariables();
    		}
    
    		posY=posY+accY;
    
    		sprPlayer.setPosition(posX, posY);
    		sprPlayer.setRotation((accY-4)*2);
    
    		sprBarBack.setPosition(posX-10, posY-40);
    		sprBar.setPosition(posX-10, posY-40);
    		sprBar.setTextureRect(IntRect(0, 5, life, 10));
    
    		window.clear(Color(2, 0, 10));
    
    		window.draw(sprBackground);
    
    		window.draw(sprPlayer);
    
    		object.Update(window, elapsedTime);
    		object.Render(window);
    
    		window.draw(sprBarBack);
    		window.draw(sprBar);
    
    		window.display();
    	}
    
    	return 0;
    }
    
    void restartGame()
    {
    	spaceStarted=false;
    
    	std::cout << "restarted" << std::endl;
    }
    
    void resetVariables()
    {
    	posX=80;
    	posY=winY/2;
    	accY=0;
    	life=100;
    
    	std::cout << "variables reset" << std::endl;
    }
    


  • Zur Sicherheit einfach mal sf::string durch std::string austauschen, hast du schon gemacht?

    MFG



  • derFer schrieb:

    Zur Sicherheit einfach mal sf::string durch std::string austauschen, hast du schon gemacht?

    MFG

    Ja das hab ich auch schon probiert



  • Welche SFML-Version? Selbst gebaut? Welcher Compiler?



  • MFK schrieb:

    Welche SFML-Version? Selbst gebaut? Welcher Compiler?

    SFML 2.0
    Visual C++ 2010 Express



  • 2.0 ist gut, hast du 2.0 RC benutzt, also von der Webseite, oder hast du dir SFML selbst kompiliert (aus dem Repository)?
    MfG



  • derFer schrieb:

    2.0 ist gut, hast du 2.0 RC benutzt, also von der Webseite, oder hast du dir SFML selbst kompiliert (aus dem Repository)?
    MfG

    Ich habe mir SFML 2.0 von der Website heruntergeladen und dann in das Projekt eingebunden(libs, include...)



  • Stelle sicher, dass du alles schrittweise befolgt. Im SFML-Forum gibts fast jeden Tag einen Thread mit Leuten, die die offiziellen Tutorials nicht genau lesen und daher inkompatible Bibliotheken linken, Debug/Release, Static/Dynamic oder verschiedene Compilerversionen mischen. Schliesse solche Fehlerquellen aus.

    Anonsten schreib Schritt für Schritt exakt auf, was du mit welcher Konfiguration inkludiert und gelinkt hast.



  • Nexus schrieb:

    ...daher inkompatible Bibliotheken linken, Debug/Release, Static/Dynamic oder verschiedene Compilerversionen mischen. Schliesse solche Fehlerquellen aus.

    Es scheint mir eher das er meinte das er die RC Version (fertig compiliert) benutzt und nur die fertigen Libs mit-linkt...


Anmelden zum Antworten