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.
顺序 选择 循环 总结
分类:
[01]【C/C++】
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2019-06-04 Mysql 中 int(3) 和 int(11) 的区别
2018-06-04 程序随感