Heim >Backend-Entwicklung >C++ >Wie behebt man den Fehler „Beim Übergeben von const xxx als ‚dieses' Argument der Mitgliedsfunktion werden Qualifikationsmerkmale verworfen' in C?

Wie behebt man den Fehler „Beim Übergeben von const xxx als ‚dieses' Argument der Mitgliedsfunktion werden Qualifikationsmerkmale verworfen' in C?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 08:34:10281Durchsuche

How to Fix

Fehlerbehebung: Behandlung von „Übergabe des Const-Arguments als „dieses“ Argument“

Beim Auftreten des Fehlers „Übergabe von const xxx als „dieses“ Argument der Mitgliedsfunktion werden Qualifikationsmerkmale verworfen „zeigt an, dass eine nicht konstante Mitgliedsfunktion für ein konstante Objekt aufgerufen wird. In diesem Fall tritt das Problem auf, wenn auf die Methoden getId() und getName() von StudentT-Objekten zugegriffen wird, die in einem std::set gespeichert sind.

Problemanalyse

Die Objekte im std::set werden als const StudentT gespeichert. Beim Aufruf von getId() und getName() für die Iterator-Dereferenzierung (*itr) erkennt der Compiler eine Nichtübereinstimmung. Die Mitgliedsfunktionen sind nicht konstant, aber das Objekt, auf das zugegriffen wird, ist konstant.

Lösung

Um dieses Problem zu beheben, sollten die Mitgliedsfunktionen getId() und getName() als konstante Methoden deklariert werden :

int getId() const {
    return id;
}
string getName() const {
    return name;
}

Durch die Deklaration als const-Methoden wird garantiert, dass sie das StudentT-Objekt nicht ändern, sodass es sicher ist, sie auf const aufzurufen Objekte.

Zusätzliche Überlegungen

Der Operator< sollte auch als const-Methode deklariert werden, da sie bei der Ausführung von Set-Operationen für const-StudentT-Objekte aufgerufen wird:

inline bool operator< (const StudentT & s1, const StudentT & s2) {
    return s1.getId() < s2.getId();
}

Durch die Deklaration als const wird sichergestellt, dass der Operator die verglichenen Objekte nicht ändert.

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Beim Übergeben von const xxx als ‚dieses' Argument der Mitgliedsfunktion werden Qualifikationsmerkmale verworfen' in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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