[SOLVED] Ungültiger Verweis auf nicht-statischen Member



  • Hallo Leute,

    ich habe folgendes Problem:

    Ich habe in einer Klasse eine statische Funktion und eine Membervariable als private deklariert. Ich nutze SDL, in diesem Fall für Sound-Output.

    static void Play();
    Mix_Chunk* sound;
    

    Innerhalb der statischen Methode rufe ich eine SDL-Funktion auf, die mir den Sound abspielt:

    void Menu::Play()
    {
    Mix_PlayChannel(-1, sound, 0);
    }
    

    Nur bekomme ich jetzt die Fehlermeldung, dass ich ungültig auf einen nicht-statischen Member verweise. Ich glaube, das hat damit zu tun, dass ich eine Funktion aufrufe (nämlich die SDL-spezifische zum Abspielen des Sounds), die außerhalb der Klasse der statischen Methode Play() definiert ist.



  • Nein, der Fehler liegt daran, dass du in einer statischen Memberfunktion (play), d.h. einer Funktion ohne aktuelles Objekt, auf eine Membervariable eines Objekts (sound) zugreifst. Auf welches Objekt soll sich das beziehen? Statische Memberfunktionen haben keinen this-Pointer.


  • Mod

    Der Fehler kommt daher, dass du die nicht-statische Membervariable sound in einer statischen Funktion benutzt. Das heißt, die Funktion wird ohne Instanz deiner Klasse aufgerufen (weil sie static ist), aber benutzt etwas, was nur aus einer Instanz der Klasse stammen kann (sound, da es nicht static ist). Es wird also auf etwas verwiesen, was an der Stelle gar nicht da ist.



  • Nathan schrieb:

    Nein, der Fehler liegt daran, dass du in einer statischen Memberfunktion (play), d.h. einer Funktion ohne aktuelles Objekt, auf eine Membervariable eines Objekts (sound) zugreifst. Auf welches Objekt soll sich das beziehen? Statische Memberfunktionen haben keinen this-Pointer.

    Ja stimmt. Mir fällt grad auch auf, dass es total sinnlos ist hier eine statische Funktion zu verwenden. Wieso sich alles einfach machen, wenns auch kompliziert geht... Trotzdem danke nochmal 🙂


Anmelden zum Antworten