Heim >Backend-Entwicklung >C++ >Warum verursachen Nicht-Const-Memberfunktionen Fehler, wenn sie mit Const-Objekten in einem „std::set' verwendet werden?
Fehler beim Übergeben von Nicht-Const-Mitgliedsfunktionen an Const-Objekte
Im bereitgestellten Code wird ein std::set zum Speichern von StudentT verwendet Objekte. Das Problem tritt auf, wenn versucht wird, die Memberfunktionen getId() und getName() für Objekte innerhalb der Menge aufzurufen. Diese Mitgliedsfunktionen sind nicht als const gekennzeichnet, was bedeutet, dass sie die Daten des Objekts ändern können. Die Objekte im std::set werden jedoch als const StudentT gespeichert, wodurch jegliche Änderungen verhindert werden.
Der Compiler erkennt diese Inkonsistenz und generiert die folgenden Fehlermeldungen:
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers ../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers
Dieser Fehler weist darauf hin dass der Compiler versucht, ein const-Objekt als this-Argument an Nicht-const-Memberfunktionen zu übergeben, was der Fall ist verboten.
Lösung:
Um dieses Problem zu beheben, ändern Sie die Memberfunktionen getId() und getName() so, dass sie wie folgt konstant sind:
int getId() const { return id; } string getName() const { return name; }
Indem Sie diese Funktionen als const markieren, stellen Sie sicher, dass sie die Daten des Objekts nicht ändern und sicher auf const aufgerufen werden können Objekte.
Zusätzlich wird empfohlen, das < Operator-Vergleichsfunktion const, indem const-Referenzen auf ihre Parameter übergeben werden:
inline bool operator< (const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
Diese Änderungen verhindern unerwartete Fehler und stellen sicher, dass der Code korrekt funktioniert.
Das obige ist der detaillierte Inhalt vonWarum verursachen Nicht-Const-Memberfunktionen Fehler, wenn sie mit Const-Objekten in einem „std::set' verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!