error: nonstatic class member



  • Hallo an alle,

    also ich mache folgendes,

    das ist die Deklaration:

    class HT{
        public:struct K{
               int v;
               void f();
               };
               int* d;
               K* k;
    };
    

    in HT.cpp will ich die Funktion f implementieren

    void HT::K::f(){
         int r = d[3]; //ein Zugriff aud array d
    }
    

    Das Problem ist, dass ich hier auf d nicht zugreifen darf und die Fehlermeldung invalid use of non-static class member bekomme.
    Dabei habe ich d extra public gemacht, und ich habe auch eine Variable vom Typ K in der Klasse HT.
    Ich verstehe nicht warum ich trotzdem nicht aus Funktion f auf d zugreifen darf.
    Kann hier vielleicht jemand ein Fehler entdecken?[code]



  • rimuru schrieb:

    Kann hier vielleicht jemand ein Fehler entdecken?[code]

    Mehrere.

    1. hast du absolut kryptische Namen und eine gruselige Einrückung. Spätestens bei Projekten mit mehr als ~1000 Zeilen blickt da keiner mehr durch, auch du nicht, wenn du das mal ne Nacht liegen gelassen hast.
    2. K ist eine eigene Klasse, die zwar innerhalb von HT definiert wird, aber dennoch sind die K's eigene Objekte. Ein K-Objekt hat also keine feste Beziehung zu irgendeinem HT-Objekt, deshalb gibts auch keine Möglichkeit für den Compiler rauszufinden, von welchem HT-Objekt du denn gerne das d[3] hättest. Ich schätze da liegt dein Denkfehler.
    3. sieht das nach einem reichlich fragwürdigen Design aus - was willst du damit erreichen?


  • Danke für die Ratschläge, das ist nicht mein wirklicher Code, den habe ich extra hingeschrieben um die Frage zu stellen.
    Jetzt verstehe ich es, ein K kann in mehreren HTs vorkommen und es ist unklar welches davon gemeint ist.



  • rimuru schrieb:

    Danke für die Ratschläge, das ist nicht mein wirklicher Code, den habe ich extra hingeschrieben um die Frage zu stellen.
    Jetzt verstehe ich es, ein K kann in mehreren HTs vorkommen und es ist unklar welches davon gemeint ist.

    Schlimmer noch: K ist vollkommen unabhängig von HT. Du kannst Instanzen von K erstellen, ohne eine Instanz von HT zu haben. Du kannst Instanzen von HT haben, ohne Instanzen von K zu haben.



  • rimuru schrieb:

    Danke für die Ratschläge, das ist nicht mein wirklicher Code

    Dann ist das der Fehler - es gibt keinen Grund, nicht den echten Code hinzuschreiben (aufs Wesentliche reduziert)


Anmelden zum Antworten