Heim > Backend-Entwicklung > C++ > Warum erhalte ich beim Zugriff auf Mitgliedsfunktionen von einem „std::set' die Fehlermeldung „Übergabe von ‚const StudentT' als ‚dieses' Argument'?

Warum erhalte ich beim Zugriff auf Mitgliedsfunktionen von einem „std::set' die Fehlermeldung „Übergabe von ‚const StudentT' als ‚dieses' Argument'?

Susan Sarandon
Freigeben: 2024-12-26 10:55:14
Original
570 Leute haben es durchsucht

Why Do I Get

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 gespeichert sind. Datenstruktur. Das Problem ergibt sich aus der Diskrepanz zwischen der Konstanz des Objekts und der Qualifikation der Mitgliedsfunktionen.

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;
Nach dem Login kopieren

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
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage