You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 12:24:11