成員函數呼叫函數限定不一致
在提供的程式碼中,存取成員函數getId() 和getName() 時出現錯誤來自儲存在集合
要理解這一點,我們需要記住集合中的物件儲存為常數引用。但是,成員函數 getId 和 getName 沒有宣告為 const,這表示它們可以修改物件的狀態。
發生錯誤的行中:
cout << itr->getId() << " " << itr->getName() << endl;
編譯器偵測到 itr 迭代器指向 const StudentT 對象,根據定義,該物件無法修改。因此,嘗試在const 物件上呼叫非常量成員函數是不允許的,因此會產生錯誤訊息:
../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
要解決此問題,我們必須將成員函數getId 和getName 聲明為const,表明它們不會修改物件的狀態:
int getId() const { return id; } string getName() const { return name; }
透過將這些函數設為const,我們保證可以在const物件上安全地呼叫它們,從而消除了常數不匹配錯誤。
此外,運算子
StudentT 類別的重載也應聲明為const:inline bool operator<(const StudentT &s1, const StudentT &s2) { return s1.getId() < s2.getId(); }
以上是為什麼從 `std::set` 存取成員函數時會出現「將 'const StudentT' 作為 'this' 參數傳遞」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!