Inkonsistente Funktionsqualifikation beim Aufruf von Mitgliedsfunktionen
Im bereitgestellten Code tritt der Fehler auf, wenn auf die Mitgliedsfunktionen getId() und getName() zugegriffen wird aus Objekten, die im Set
Um dies zu verstehen, müssen wir uns daran erinnern, dass Objekte in einer Menge als konstante Referenzen gespeichert werden. Allerdings sind die Mitgliedsfunktionen getId und getName nicht als const deklariert, was bedeutet, dass sie den Zustand des Objekts ändern können.
In der Zeile, in der der Fehler auftritt:
cout << itr->getId() << " " << itr->getName() << endl;
the Der Compiler erkennt, dass der Iterator auf ein const StudentT-Objekt verweist, das per Definition nicht geändert werden kann. Folglich ist der Versuch, nicht konstante Mitgliedsfunktionen für ein konstante Objekt aufzurufen, nicht zulässig, daher werden folgende Fehlermeldungen generiert:
../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
Um dieses Problem zu beheben, müssen wir die Mitgliedsfunktionen getId und getName als const deklarieren. Dies gibt an, dass sie den Zustand des Objekts nicht ändern:
int getId() const { return id; } string getName() const { return name; }
Indem wir diese Funktionen zu const machen, garantieren wir, dass sie sicher auf const-Objekten aufgerufen werden können, wodurch das eliminiert wird Fehler bei Nichtübereinstimmung der Konstanz.
Zusätzlich ist der Operator< Überladung für die StudentT-Klasse sollte auch als const deklariert werden:
inline bool operator<(const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
Dadurch wird sichergestellt, dass die Vergleichsoperation nicht versucht, die verglichenen Objekte zu ändern, wodurch die Codekorrektheit gewahrt bleibt.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Zugriff auf Mitgliedsfunktionen von einem „std::set' die Fehlermeldung „Übergabe von ‚const StudentT' als ‚dieses' Argument'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!