member-funktion will nicht
-
gerade bin ich dabei eine graphen implementation auszuprobieren.
dazu habe ich 2 klassen gebaut:
knoten - speichert den inhalt eines knoten plus zeiger auf den nächsten knoten
enthält member funktion finde, um knoten zu finden
kanten - speichert einen oder mehrere kanten mit zeiger auf knoten.nun habe ich die memberfunktionen ausserhalb definiert.
Knoten* Knoten::finde(inhalt k) { Knoten *p_aktuell = p_erster; bool weiter = true; int i = 0; while ((p_aktuell != NULL) && (weiter)) { if (p_aktuell->key == k) { weiter = false; } else { p_aktuell = p_aktuell->p_naechsterKnoten; i++; } } return p_aktuell; }will ich nun finde von ausserhalb aufrufen, z.b. um eine neue kante einzufügen, dann bekomme ich eine fehlermeldung.
ich habe die beiden klassen schon gegeneinander friend gemacht...
er kommt immer mit der meldung "finde nichtdeklarierter bezeichner"wenn ich finde so aufrufe Knoten::finde(a.key); ist die meldung weg, aber dann sagt er: Unzulässiger aufruf einer nicht statischen memberfunktion...

wie kann ich den compiler dazu überreden doch finde zu benutzen??
-
Morgen,
dir ist klar, dass du von Knoten eine Instanz haben musst, mit der du arbeiten
kannst?Um auf Elementfunktionen von Klassen zugreifen zu koennen, gibt es zwei
Moeglichkeiten, die da waeren:Zugriff auf eine statische Elementfunktion:
Du hast eine statische Elementfunktion definiert, welche _nicht_ den this-Zeiger
implizit mitfuehrt und somit ohne eine Instanz der Klasse aufgerufen werden
kann:class MyClass { private: public: static int test() { return 1; } }; //aufruf z. B.: int i = MyClass::test();Innerhalb von statischen Elementfunktionen kannst du _nicht_ auf Klassen-
variablen zugreifen. Der Grund ist, dass der this-Zeiger, wie schon erwaehnt,
nicht mitgefuehrt wird und somit der Bezug zum Objekt fehlt. Das ist auch klar,
denn wir rufen die Funktion ohne eine Instanz der Klasse auf, s. o. Code.Die zweite Moeglichkeit ist, ganz normal eine Instanz zu erstellen und mit
dieser zu arbeiten:class MyClass { private: public: int test() const { return 1; } }; //aufruf MyClass myClass; int i = myClass.test();mfg
v R