首頁 > 後端開發 > C++ > 為什麼 `getId()` 和 `getName()` 在 C 中導致「將 'const' 物件作為 'this' 參數傳遞」錯誤?

為什麼 `getId()` 和 `getName()` 在 C 中導致「將 'const' 物件作為 'this' 參數傳遞」錯誤?

DDD
發布: 2024-12-23 20:18:15
原創
802 人瀏覽過

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

錯誤:將Const 物件作為「this」參數傳遞

在給定的C 程式碼中,您在嘗試存取getId 時遇到錯誤() 和getName() 儲存在 a中的物件的成員函數std::set:

<br>錯誤:將'const StudentT' 作為'int StudentT::getId()' 的'this' 參數傳遞會丟棄限定符<br>錯誤:傳遞'const StudentT' 作為'std::string StudentT::getName()' 的'this'參數丟棄限定符<br>
登入後複製

此錯誤源自於 std::set 中的物件儲存為 const StudentT 實例。當您對這些 const 物件呼叫 getId() 和 getName() 函數時,編譯器會偵測到問題。

在 C 中,不允許非常量成員函數修改 const 物件。 getId() 和 getName() 是非常量函數,可能會修改呼叫它們的物件。但是,由於集合中的物件是 const,因此任何透過這些成員函數修改它們的嘗試都會出錯。

解決方案是將getId() 和getName() 函數也設為const:

int getId() const {
    return id;
}

string getName() const {
    return name;
}
登入後複製

透過將這些函數設為const,您表明它們不會修改它們所呼叫的對象,並且編譯器將允許它們在const上使用

此外,建議實現運算符

inline bool operator< (const StudentT & s1, const StudentT & s2) {
    return s1.getId() < s2.getId();
}
登入後複製
作為常數引用以匹配其作為比較函數的預期用途:

以上是為什麼 `getId()` 和 `getName()` 在 C 中導致「將 'const' 物件作為 'this' 參數傳遞」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板