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月闰年的特殊情况,后续可以自行优化。
修复方案
- 如果你只是要实现date1自增1天的后置自增逻辑,直接把调用代码改成
date1++;即可,同时修正运算符实现:
Date Date::operator++(int) { Date temp = *this; // 保存自增前的原对象副本 this->increment(); // 对当前原对象做自增操作 return temp; // 返回自增前的副本,符合后置自增语义 }
- 如果你要实现一次性加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
相关产品推荐
相关产品推荐

