a nonstatic member reference must be relative to a specific object



  • Hi,

    wie kann man von einer Klasse aus auf eine öffentliche Funktion oder Variable zugreifen?? Bekomme momentan immer die Fehlermeldung "a nonstatic member reference must be relative to a specific object"

    Anbei ein kleines (nicht vollständiges) Beispiel welches die Problematik zeigt.

    Ich arbeite mit der MFC - allerdings glaube ich dass dies ein allgemeines C++-Problem darstellt; daher mein Post in diesem Forum.

    /* classA.h ********************* */
    class A : public CWinApp
    {
    public
      void testfunktion(void);
    
    }; 
    
    /* classB.h **************************/
    class B: public CFormView
    {
    ....
    }
    
    /* classB.cpp ********************/
    
    functionB()
    {
    
       classA::testfunktion();   // <- Fehlermeldung
    }
    

    Gruß
    Konrad



  • du möchtest also eine statische funktion haben? (also du brauchst keinerlei instanz-spezifische daten innerhalb der funktion?)

    bb



  • testFunktion() ist keine statische Methode. Du brauchst also ein Objekt.
    classA myA;
    myA.testFunktion();



  • Du brauchst noch zur Methode ein Objekt.



  • Konrad Bauer schrieb:

    wie kann man von einer Klasse aus auf eine öffentliche Funktion oder Variable zugreifen

    Dies entspricht dem nachfolgenden Code aber nicht wirklich 😃

    Hier mal 2 Beispiele, um aus einer öffentlichen Funktion heraus auf die Klasse zuzugreifen

    class A
    {
        public:
            void testfunktion() {};
    
    };
    
    void functionB(A &a)
    {
       a.testfunktion();
    }
    

    Oder mit einer Statischen Funktion

    class A
    {
        public:
            static void testfunktion() {};
    
    };
    
    void functionB()
    {
       A::testfunktion(); 
    }
    

    Beim letzten Beispiel macht des mit static Sinn, wenn du in deiner Klasse noch nichtstatische Elemente hast. Für rein-Statische Klassen sollte man dann eher namespaces nehmen


Anmelden zum Antworten