[SOLVED] Error LNK1120: 1 nicht aufgelöste Externe und Verweis auf nicht aufgelöstes externes Symbol



  • tkausl schrieb:

    Game* Game::sInstance = 0;
    

    Was solln das darstellen?

    Eine Definition.



  • Ich will die statische Instanz sInstance gleich Null setzen, und mit der Funktion Game::Instance() kann ich dann auf diese zugreifen oder nicht?

    In der main.cpp habe ich folgendes programmiert:

    Game::Instance()->Initialize(...);
    
    while(running)
    {
       Game::Instance()->Update();
       (...)
    }
    (...)
    


  • tkausl schrieb:

    Game* Game::sInstance = 0;
    

    Was solln das darstellen? Definiert wurde die Variable bereits in der headerdatei und auf Private Variablen kannst du ohnehin nicht von außen zugreifen.

    Ohh stimmt, wie mach ich denn den Singleton der Game Klasse richtig?



  • out schrieb:

    Deine Klasse hat jetzt gar keinen Konstruktor. Dann kannst du auch kein Game Objekt erstellen.

    Genau das will ich ja auch. Ich möchte nicht, dass man mehrere Game Instanzen erstellen kann. Es soll halt nur eine Instanz geben, nur ein Game. Und auf dieses statische Objekt will ich über die Methode Game::Instance() zugreifen können. Die Methode gibt mir ja die statische Instanz als Rückgabewert zurück, damit ich darauf zugreifen kann.



  • huzzm schrieb:

    tkausl schrieb:

    Game* Game::sInstance = 0;
    

    Was solln das darstellen? Definiert wurde die Variable bereits in der headerdatei und auf Private Variablen kannst du ohnehin nicht von außen zugreifen.

    Ohh stimmt, wie mach ich denn den Singleton der Game Klasse richtig?

    Nix da "stimmt", du machst das genau richtig. Jedenfalls soweit es den Einwand von tkausl angeht, ansonsten kann man über Singletons im Allgemeinen und diese Umsetzung im Besonderen natürlich diskutieren.

    Auf deine ursprüngliche Frage: Der Konstruktor ist nicht implementiert. Du erzeugst in Instance ein Objekt der Klasse, dafür wird der benötigt.



  • Bashar schrieb:

    huzzm schrieb:

    tkausl schrieb:

    Game* Game::sInstance = 0;
    

    Was solln das darstellen? Definiert wurde die Variable bereits in der headerdatei und auf Private Variablen kannst du ohnehin nicht von außen zugreifen.

    Ohh stimmt, wie mach ich denn den Singleton der Game Klasse richtig?

    Nix da "stimmt", du machst das genau richtig. Jedenfalls soweit es den Einwand von tkausl angeht, ansonsten kann man über Singletons im Allgemeinen und diese Umsetzung im Besonderen natürlich diskutieren.

    Auf deine ursprüngliche Frage: Der Konstruktor ist nicht implementiert. Du erzeugst in Instance ein Objekt der Klasse, dafür wird der benötigt.

    Ich hab den Konstruktor ja nur auf private gesetzt, also kann die Methode Instance() ja auf den Konstruktor zugreifen oder? Muss ich etwas Bestimmtes mit dem Konstruktor machen?



  • huzzm schrieb:

    Muss ich etwas Bestimmtes mit dem Konstruktor machen?

    Du musst ihn definieren. Implementieren. Sowas hinschreiben:

    Game::Game() 
    {
      // initialize stuff
    }
    


  • Bashar schrieb:

    huzzm schrieb:

    Muss ich etwas Bestimmtes mit dem Konstruktor machen?

    Du musst ihn definieren. Implementieren. Sowas hinschreiben:

    Game::Game() 
    {
      // initialize stuff
    }
    

    Stimmt, danke. Ich habe jetzt folgendes mal exemplarisch implementiert:

    Game::Game()
    {
       cout << "hallo" << endl;
    }
    

    Dann erhalte ich aber folgende Fehlermeldung, die ich einfach mal überhaupt nicht raffe:

    Fehler 1 error C2512: 'Texture': Kein geeigneter Standardkonstruktor verfügbar c:\users\ivan\documents\visual studio 2012\projects\c++\sdl\rolejump\rolejump\game.cpp 19 1 RoleJump

    Wieseo plötzlich die Texture Klasse?



  • Das kann man aus dem bisher geposteten Code nicht beantworten. Es kann auch normalerweise nicht sein, dass der Fehler nach dieser Änderung aufgetreten ist, weil das vorher ein Linkerfehler war und jetzt ein Compilerfehler ist.



  • Bashar schrieb:

    Das kann man aus dem bisher geposteten Code nicht beantworten. Es kann auch normalerweise nicht sein, dass der Fehler nach dieser Änderung aufgetreten ist, weil das vorher ein Linkerfehler war und jetzt ein Compilerfehler ist.

    Dann trotzdem danke schonmal für deine hilfreichen Antworten 🙂


Anmelden zum Antworten