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

C++ Date类postfix operator++重载报不存在call operator错误求助

问题原因

你遇到的报错完全是因为代码写法不符合C++运算符语法规则,具体有以下几个明确的问题:

1. 直接触发报错的语法错误

你写的date1++(25)是错误写法:

  • 后置++运算符的返回值是Date类型的临时对象,你后面紧跟(25)相当于尝试调用Date类的函数调用运算符operator(),而你没有为Date类实现这个运算符,自然就抛出type 'Date' does not provide a call operator的报错。
  • 后置++的int参数只是C++标准用来区分前置/后置自增的标记,不是给用户传自定义参数用的,正常的后置自增用法就是date1++,不需要也不能额外传参数。

2. 后置自增运算符的实现逻辑错误

你当前写的后置++重载不符合C++后置自增的语义:

Date Date::operator++(int)
{
  Date days(month, day, year);
  days.increment();
  return days;
}

上述代码只修改了临时对象days的值,原对象date1本身没有做任何自增操作,完全不符合后置自增「原对象自增、返回自增前的值」的标准语义。

3. 代码关联错误

你标注为increment函数的实现,实际是decrement减一天的逻辑,而且这个减逻辑还写死了所有月份都是30天,没有处理不同月份天数不同、2月闰年的特殊情况,后续可以自行优化。


修复方案

  1. 如果你只是要实现date1自增1天的后置自增逻辑,直接把调用代码改成date1++;即可,同时修正运算符实现:
Date Date::operator++(int)
{
  Date temp = *this; // 保存自增前的原对象副本
  this->increment(); // 对当前原对象做自增操作
  return temp; // 返回自增前的副本,符合后置自增语义
}
  1. 如果你要实现一次性加25天的需求,不要用自增运算符实现,单独定义加法运算符或者加天数的成员函数即可,示例:
// 成员函数实现加法
Date Date::operator+(int add_days) {
  Date res = *this;
  for(int i=0;i<add_days;i++) res.increment();
  // 也可以写更高效的批量加天数逻辑
  return res;
}
// 调用方式
date1 = date1 + 25;

内容的提问来源于stack exchange,提问作者ASM student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:54:02