ERROR:C2676 二進制“==”:“Student”不定義該運算符或到預定義運算符可接收的類型的轉換


ERROR:C2676 二進制“==”:“Student”不定義該運算符或到預定義運算符可接收的類型的轉換

多次被同事問到此類錯誤,於此備錄一下。

【1】復現問題

用最簡單代碼復現說明此問題,示例如下:

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 #include <vector>
 5 
 6 struct Student
 7 {
 8     std::string code;  // 學號(唯一性標識)
 9     int grade;         // 年級
10     std::map<std::string, double> scores; // <科目,成績>
11 };
12 
13 int main()
14 {
15     std::vector<Student> vecStu;
16     vecStu.push_back({ "080605109", 6, { {"English", 100}, {"China", 100} } });
17     vecStu.push_back({ "080605113", 7, { {"English", 96}, {"China", 67} } });
18     Student obj = { "080605114", 8, { {"English", 95}, {"China", 66} } };
19     vecStu.push_back(obj);
20     // 查找元素obj
21     {
22         auto iter = std::find(vecStu.begin(), vecStu.end(), obj);
23         if (iter != vecStu.end())
24         {
25             std::cout << "method3: find exists." << std::endl;
26         }
27     }
28 
29     return 0;
30 }

編譯錯誤截圖:

【2】原因分析

計算機弄不明白你想讓它以什么標准來判斷兩個對象相等,所以你得給它確定了相等的標准或准則。

【3】解決方案

解決方案:自定義類,需要重載運算符“==”。

示例代碼如下:

 1 #include <iostream>
 2 #include <map>
 3 #include <string>
 4 #include <vector>
 5 
 6 struct Student
 7 {
 8     std::string code;  // 學號(唯一性標識)
 9     int grade;         // 年級
10     std::map<std::string, double> scores; // <科目,成績>
11 
12     bool operator==(const Student& obj) const
13     {
14         return obj.code == code; // 只要學號相同即可
15     }
16 };
17 
18 int main()
19 {
20     std::vector<Student> vecStu;
21     vecStu.push_back({ "080605109", 6, { {"English", 100}, {"China", 100} } });
22     vecStu.push_back({ "080605113", 7, { {"English", 96}, {"China", 67} } });
23     Student obj = { "080605114", 8, { {"English", 95}, {"China", 66} } };
24     vecStu.push_back(obj);
25     // 查找元素obj
26     {
27         auto iter = std::find(vecStu.begin(), vecStu.end(), obj);
28         if (iter != vecStu.end())
29         {
30             std::cout << "method3: find exists." << std::endl;
31         }
32     }
33 
34     return 0;
35 }

 

good good study, day day up.

順序 選擇 循環 總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM