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; }
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(); }
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!