Das Ziel ist einfach, ich habe eine Rectangle
Klasse mit Breite, Höhe und Flächeneigenschaften. Ich habe eine Operator-Überlastung für den Operator <
gemacht, wie das std::sort
für seine Vergleiche verwendet.std :: sort bewegt nicht die Elemente eines Vektors
Basierend auf dem, was ich bisher online gefunden habe, scheint es, dass dieses Problem oft davon herrührt, dass etwas im Kopieroperator oder Konstruktor für eine Klasse falsch ist.
Hier ist meine Kopie Konstruktor für die Rectangle
Klasse:
Rectangle::Rectangle(const Rectangle & other)
{
m_width = other.m_width;
m_height = other.m_height;
m_area = other.m_area;
}
Und meine Kopie Operator hier:
Rectangle & Rectangle::operator=(const Rectangle & rhs)
{
if (this != &rhs)
{
m_width = rhs.m_width;
m_height = rhs.m_height;
}
return *this;
}
Hier ist der <
Betreiber:
bool Rectangle::operator<(const Rectangle & rhs)
{
return (m_area > rhs.m_area);
}
Und schließlich , so nenne ich die Sortiermethode, nur für den Fall:
// rects is a vector<Rectangle> with several rectangles in it
std::sort(rects.begin(), rects.end());
Ich denke, dass ich alles richtig mache, aber jede Hilfe wird geschätzt!
Sie lassen den Compiler die Konstruktion und Zuweisung von Kopien für Sie implementieren. Es ist weniger wahrscheinlich, dass triviale Fehler eingeführt werden. – juanchopanza
Warum kopieren Sie den Bereich in Ihrem Zuweisungsoperator nicht? – Galik
Ihr Problem kann nicht aus diesen Snippets reproduziert werden => keine Hilfe –