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.
- 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.
- 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.
- 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)