Warum funktioniert das sortieren ohne Klasse, und mit Klasse nicht?
-
Hey @all,
im Betreff ist zwar schon das meiste gesagt, jedoch hier ein Beispiel:
Folgender Code funktioniert:. . . bool sortForward(const Daten& lhs, const Daten& rhs) { return lhs.Data[0] > rhs.Data[0]; } . . . sort(Daten2.begin(), Daten2.end(), sortForward);
jedoch dieser funktioniert nicht:
. . . bool MeineKlasse::sortForward(const Daten& lhs, const Daten& rhs) { return lhs.Data[0] > rhs.Data[0]; } . . . sort(Daten2.begin(), Daten2.end(), sortForward);
Der Unterschied ist, das beim zweiten Fall die Funktion/Methode sortForward in einer Klasse ist, und beim ersten Beispiel nicht. Ich verstehe nur nicht, warum es einmal geht, und beim anderen nicht.
Könte mich da bitte kurz jemand aufklären?
MfG Roman1311
-
Weil
Klasse::Methode()
intern als
Klasse_Methode(Klasse* this)gesehen wird.
Denn schließlich hat jede Memberfunktion ja einen this Zeiger.
Tipp: static Methoden haben keinen this Zeiger.
-
Ja, funktioniert soweit, nur kann ich in dieser Methode überhaupt keine this Zieger mehr verwenden
static bool sortForward(const Daten& lhs, const Daten& rhs); . . . bool MeineKlasse::sortForward(const Daten& lhs, const Daten& rhs) { if(this->Index>=0 && this->Index<lhs.Data.size()) return lhs.Data[this->Index] < rhs.Data[this->Index]; }
Das schlägt fehl, Fehlermeldung:
"data.cpp": E2297 'this' kann nur für Elementfunktionen verwendet werden in Funktion MeineKlasse::sortForward(const MeineKlasse::Daten &,const MeineKlasse::Daten &) in Zeile 18
Und zwar soll mit einer Methode der Index, nach dem sortiert werden soll angegeben werden, nur wenn ich die Methode jetzt auf static setze, dann bekomme ich keinen Index mehr
MfG Roman1311
-
natürlich hast du bei einer Statischen methode nicht mehr die möglichkeit den this pointer zu verwenden, auf welches object wolltest du das auch tun.
Das mit dem Index habe ich nicht ganz verstanden, aber entweder der ist auch statisch, dann muss er als solcher angelegt werden und kann in einer statischen Methode benutzt werden, oder er gehört zu einem Object, dann must du wissen zu welchem Object du den Index benutzen willst. Dir bleiben also zwei Obejecte übrig zu denen du den Index benutzen kannst.
-
Also, den Index brauche ich, weil ich einem "vector<string>" in einer Struktur verwenden möchte, und mit diesem Index greife ich auf den Vektor zu also Data[Index]
// Index = 0, ergibt also erster Wert. INdex = n, letzter WertIn einer Struktur halte ich es deswegen fest, da jeder n Elemente Eintragen kann.
Beispiel:
Mustermann Max Musterstrasse 0699/00000000
Mustermann2 Max2 Musterstrasse2 0699/111111111Nun kann ich damit den Nachnamen, Vornamen, Strasse, Telefon und was der Benutzer sonst noch eingibt sortieren.
MfG Roman1311
P.S.: Jedoch ist das Problem noch nicht behoben. In der Klassendefinition habe ich folgendes
MeineKlasse { . . . int Index; // Ich habe auch schon // static int Index; probiert, aber auch kein Erfolg . . . static bool sortForward(const Daten& lhs, const Daten& rhs); . . . };