將非常量成員函數傳遞給常數物件時出錯
在提供的程式碼中,使用std::set 來儲存StudentT物件。當嘗試對集合內的物件呼叫 getId() 和 getName() 成員函數時,會出現此問題。這些成員函數沒有標記為 const,這意味著它們可以修改物件的資料。但是,std::set 中的物件儲存為 const StudentT,從而防止任何修改。
編譯器偵測到這種不一致並產生以下錯誤訊息:
../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
此錯誤表示編譯器正在嘗試將const 物件作為this 參數傳遞給非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(); }
以上是為什麼非常量成員函數在 `std::set` 中與 Const 物件一起使用時會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!