【发布时间】:2020-04-14 02:08:26
【问题描述】:
尝试在 Month 类上实现一些重载运算符:
class Month
{
int monthNumber;
string name;
}
我能够毫无问题地实现以下构造函数:
Month::Month(int cust_month)
{
monthNumber = cust_month;
name = int_month.at(cust_month);
}
注意使用映射(未显示)int_month,其中 int 1-12 映射到相应的月份名称,这很好用。但是在重载 ++ 运算符时尝试做类似的事情:
Month Month::operator++() {
if (monthNumber == 12) {
monthNumber = 1;
name = "January";
}
else{
++monthNumber;
name = int_month(monthNumber); // ERROR
}
return *this;
}
在上面sn -p int_month 高亮显示并显示错误:
Type 'map<int, std::__1::string>' (aka 'map<int, basic_string<char, char_traits<char>, allocator<char> > >') does not provide a call operator
我读过类似的帖子,他们都解决了某种编程错误,但在阅读之后,我仍然不确定这个错误对我的代码意味着什么。我不仅很好奇如何解决它,而且很好奇为什么在我的构造函数中使用映射按键分配值工作正常,但相同的过程不能重载运算符。
【问题讨论】:
-
你的意思是
.at(),而不是()? -
好吧,如果您比较在构造函数中分配它的方式与
++重载的方式,您会发现一些差异。你真的必须在 C++ 中注意所有细节。每一个可能的细节都很重要。附言您的++运算符应该返回一个引用。
标签: c++ stl operator-overloading