Heim > Backend-Entwicklung > C++ > Warum verursachen „getId()' und „getName()' Fehler „Übergabe des ‚const'-Objekts als ‚dieses' Argument' in C?

Warum verursachen „getId()' und „getName()' Fehler „Übergabe des ‚const'-Objekts als ‚dieses' Argument' in C?

DDD
Freigeben: 2024-12-23 20:18:15
Original
800 Leute haben es durchsucht

Why Are `getId()` and `getName()` Causing

Fehler: Übergeben von Const-Objekten als „diese“ Argumente

Im angegebenen C-Code tritt beim Versuch, auf die getId zuzugreifen, ein Fehler auf () und getName() Mitgliedsfunktionen von Objekten, die in a gespeichert sind std::set:

<br>Fehler: Beim Übergeben von „const StudentT“ als „this“-Argument von „int StudentT::getId()“ werden Qualifikationsmerkmale verworfen.<br>Fehler: Beim Übergeben von „const „StudentT“ wird als „dieses“ Argument von „std::string StudentT::getName()“ verworfen Qualifizierer<br>

Dieser Fehler ist auf die Tatsache zurückzuführen, dass die Objekte innerhalb des std::set als const StudentT-Instanzen gespeichert sind. Wenn Sie die Funktionen getId() und getName() für diese Konstantenobjekte aufrufen, erkennt der Compiler ein Problem.

In C dürfen Nicht-Konstanten-Memberfunktionen keine Konstantenobjekte ändern. getId() und getName() sind nicht konstante Funktionen, die möglicherweise das Objekt ändern können, für das sie aufgerufen werden. Da die Objekte in der Menge jedoch konstant sind, wäre jeder Versuch, sie über diese Mitgliedsfunktionen zu ändern, ein Fehler.

Die Lösung besteht darin, auch die Funktionen getId() und getName() konstant zu machen:

int getId() const {
    return id;
}

string getName() const {
    return name;
}
Nach dem Login kopieren

Indem Sie diese Funktionen zu „Const“ machen, geben Sie an, dass sie das Objekt, für das sie aufgerufen werden, nicht ändern und der Compiler ihre Verwendung für „Const“ zulässt Objekte.

Zusätzlich wird empfohlen, den Operator< als konstante Referenz, um der beabsichtigten Verwendung als Vergleichsfunktion zu entsprechen:

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

Das obige ist der detaillierte Inhalt vonWarum verursachen „getId()' und „getName()' Fehler „Übergabe des ‚const'-Objekts als ‚dieses' Argument' in C?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage