Globale Variable



  • Oha, bin grad nich zuhause aber werd mir das dann mal anschauen, vielen dank auf jedenfall schonmal!



  • Jetzt krieg ich einen Fehler...

    error LNK2001: Nicht aufgelöstes externes Symbol ""private: __thiscall SMap::SMap(void)" (??0SMap@@AAE@XZ)".
    

    bei

    SMap::Instance().LoadMap("map.txt");
    


  • Tausche gerne ein ' S ' gegen ein ' C '.



  • Spielt das ein Rolle ob ich da ein S oder ein C hab? ich hab überall S gegen C getauscht....



  • Ne, hab nur geglaubt, du hättest Jochen S.'s Beispiel übernommen ( CMap ).
    Spendier dem Konstruktor eine Definition.



  • I did...

    Singleton.hpp

    class SMap
    
    {
    private:
    	SMap();
    
    public:
    
    	int mapFile[100][100];
    
    	void LoadMap(const char *filename);
    
    	static SMap &Instance()
    	{
    		static SMap m;
    		return m;
    	}
    
    };
    

    Singleton.cpp

    #include "stdafx.h"
    #include "SingletonMap.hpp"
    #include <fstream>
    
    void SMap::LoadMap(const char *filename)
    {
    	int mapSizeX, mapSizeY, loadX, loadY;
    	std::ifstream openfile(filename);
    	if(openfile.is_open())
    	{
    		openfile >> mapSizeX >> mapSizeY;
    			while(!openfile.eof())
    			{
    				openfile >> mapFile[loadX][loadY];
    				loadX++;
    				if(loadX >= mapSizeX)
    				{
    					loadX = 0;
    					loadY++;
    				}
    			}
    	}	
    }
    
    int mapFile[100][100];
    

    Map.cpp

    void Map::DrawMap(sf::RenderWindow *mainWindow)
    
    {
    
    	SMap::Instance().LoadMap("map.txt"); //
    
    }
    


  • Flutscherino schrieb:

    Singleton.hpp

    class SMap
    {
    private:
    	SMap(); // hat keine Definition -> "unresolved external Symbol"
    
    public:
    	int mapFile[100][100]; // warum public?
    /* ... */
    };
    

    Singleton.cpp

    void SMap::LoadMap(const char *filename)
    {
    	int mapSizeX, mapSizeY, loadX, loadY; // loadX und loadY bleiben bis zur Verwendung uninitialisiert!?
    /* ... */
    }
    
    int mapFile[100][100]; // <-- wofür?
    

    Map.cpp

    void Map::DrawMap(sf::RenderWindow *mainWindow) // <- Noch eine Map-Klasse (deren Deklaration du uns unterschlägst) !?
    {
    /* ... */
    }
    


  • Oh wow vielen Dank, habs rausgefunden an was es lag!

    ich musste einfach n leeren Konstruktor machen ;p

    int mapFile[100][100]; // <-- wofür?
    

    Das frage ich mich auch schon länger, aber immer wenn ich irgendwas nicht aufgelöst hab und am schluss hinschreib klappt es.... warum, das weis ich leider noch nicht 😕



  • weil du in deinem restlichen Code nicht die Klasse benutzt sondern weiterhin deine alte globale Variable

    greetz KN4CK3R



  • Seid ihr sicher, dass es eine gute Idee ist, einem absoluten Anfänger ohne grundlegende Kenntnisse ein Singleton um die Ohren zu hauen?



  • Wen meinst du mit "ihr"?



  • Swordfish schrieb:

    Wen meinst du mit "ihr"?

    Jochen S. (er hat das vorgeschlagen) und dich (du hast Hilfestellung bei der Anwendung geleistet).



  • Aha. ... und weil ich nicht sofort geschrien hab', das Singletons phöse sind, der Phurche es lassen soll, weil's ihm in seinem Lernstadium nix bringt, bin ich natürlich der Mittäterschaft schuldig - verstehe. 💡

    // edit: Orthographie...



  • Swordfish schrieb:

    Aha. ... und weil ich nicht sofort geschrien hab' das Singletons phöse ist, der Phurche es lassen soll weils ihm in seinem Lernstadium nix bringt bin ich natürlich der Mittäterschaft schuldig - verstehe. 💡

    😮

    meine Güte, jetzt dreh doch nicht gleich durch. Ich hab gesehen, dass hier auf einmal Singletons durch die Gegend geschmissen werden und habe angemerkt, dass das evtl. keine gute Idee ist. Sollte wirklich kein persönlicher Angriff sein.



  • Streitet doch nicht um mich 😞



  • Singletons sind super... finde ich zumindest 😉

    @Flutscherino:
    Ach, mich lässt das kalt, ob die anderen über meine Lösung streiten oder nicht 😉
    Wie siehts aus, läuft alles, oder brauchst du noch irgendwo Hilfe?



  • Singletons sind inetwa gleich gut/phöse wie globale Variablen.
    Und wer als Anfänger Singletons verwendet um globale Variablen loszuwerden hat mMn. 'was falsch verstanden.
    Finde ich zumindest 🤡



  • Flutschii schrieb:

    Spielt das ein Rolle ob ich da ein S oder ein C hab? ich hab überall S gegen C getauscht....

    Mensch Jung, mach dir das Leben nicht so schwer. Tausche C++ gegen C.
    🙂



  • Jochen S. schrieb:

    Singletons sind super... finde ich zumindest 😉

    ja, sie haben definitiv ihre Daseinsberechtigung. Nur nicht unbedingt für einen Anfänger, der nicht mit Parametern und Rückgabewerten umgehen kann und Klassen ansheinend gar nicht kennt.

    Ich finde Differentialgleichungen auch super, aber es gibt einen Grund, warum diese nicht bereits in der zweiten Klasse durchgenommen werden.


Anmelden zum Antworten