std::sort() auf einen Vektor der Klasse Zeiger
Ich habe einen Vektor der Klasse Zeiger std::vector<Square*> listSquares
. Ich möchte sozusagen mit einem der Attribute der Klasse als Schlüssel. Dies ist, was ich Tue
bool compById(Square* a, Square* b)
{
return a->getId() < b->getId();
}
std::sort(listSquares.begin(), listSquares.end(), compById)
aber der compiler sagt:
Fehler: keine passende Funktion für Aufruf von " Sortieren(std::vector::iterator, std::vector::iterator <unresolved overloaded function type>)'
was mache ich hier falsch?
- Wenn Sie mit C++11 solltest du diese lambda:
std::sort(listSquares.begin(), listSquares.end(), [](Square* a, Square* b){return a->getId() < b->getId;})
. - Stellen Sie sicher, dass Sie tatsächlich wollen, dass Zeiger und nicht nur Objekte.
- Ich kann kein C++11. @chris ich bin mir sicher, ich will Zeiger verwenden.
- haben Sie erklärt compById innerhalb einer Klasse oder außerhalb? Es sollte draußen sein.
- Ich habe erklärt, es innerhalb der Klasse als private-member-Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um
compById
als parameter anstd::sort
es sollte nicht sein, eine member-Funktion. Das ist falschDies ist besser,
Den wichtigsten Teil, den Sie gerade fehlt, ist, dass die Argumente der Vergleichsfunktion werden
const
. Ein weiterer ist der return-Typ. Wenn man die return-Typ bei der Deklaration einer Funktion kann der compiler davon ausgehen, es gibtint
was ist in diesem Fall nicht korrekt.- Und natürlich der Vergleich-Funktion werden im Bereich, wenn Sie rufen Sie die
std::sort
Funktion.Können Sie eine member-Funktion. Aber Sie müssen es definieren als eine statische member-Funktion und rufen Sie es von der Klasse und nicht einer Instanz der Klasse.
Bemerken
static
vor die Deklaration der Funktion und dieSquare::
vor den Namen der Funktion in der Art.