如何比较C++自定义结构体实例,解决operator==不匹配报错?
报错原因
- 自定义结构体
tfecha默认没有实现==运算符,C++不支持直接对自定义类型用==做相等性判断,因此触发运算符不匹配的报错。 - 代码中误用了
strcmp函数:strcmp仅用于对比C风格字符串,接收两个const char*类型参数,既不能接收结构体作为入参,你写的strcmp(f1==f2)也完全不符合函数调用规则,属于语法错误。 - 额外冗余:你引入的
string.h头文件没有用到,可以直接删除。
修复方案
提供两种常用实现方式:
方案1:直接对比结构体成员(无需修改结构体定义,适合单次对比场景)
直接修改main函数中的判断逻辑,逐个对比两个结构体的所有成员:
// 替换原if分支代码 if(f1.dia == f2.dia && f1.mes == f2.mes && f1.anio == f2.anio) { cout << "Las fechas son iguales:" << endl; } else { cout << "Las fechas son diferentes:" << endl; }
方案2:为结构体重载==运算符(适合多处需要对比日期的场景,复用性更高)
在tfecha结构体定义内部添加==运算符重载逻辑,之后所有tfecha类型的实例都可以直接用==做相等判断:
struct tfecha { int dia; int mes; int anio; // 新增==运算符重载 bool operator==(const tfecha& other) const { return dia == other.dia && mes == other.mes && anio == other.anio; } }; // main函数中的判断逻辑可以简化为: if(f1 == f2) { cout << "Las fechas son iguales:" << endl; } else { cout << "Las fechas son diferentes:" << endl; }
补充方案:使用std::tie简化成员对比(C++11及以上版本支持)
如果不想手写多段成员对比,也可以引入<tuple>头文件,用std::tie打包成员后做对比,避免手动对比时写错成员顺序的问题:
#include <tuple> // 判断逻辑写法 if(std::tie(f1.dia, f1.mes, f1.anio) == std::tie(f2.dia, f2.mes, f2.anio)) { // 相等逻辑 }
内容的提问来源于stack exchange,提问作者Cpp
相关产品推荐
相关产品推荐

