我正在尝试重载' - '后缀运算符。我有这段代码:
class Counter
{
private:
int count;
public:
Counter()
{ count = 0; }
Counter(int c)
{ count = c; }
void setCount(int c)
{ count = c; }
int getCount()
{ return count; }
int operator--()
{
int temp = count;
count = count - 1;
return temp;
}
};
然后在main
我有这个函数调用:
Counter a;
a.setCount(5);
cout << a-- << endl;
这给了我这个错误:
error: no ‘operator--(int)’ declared for postfix ‘--’, trying prefix operator instead
但是当我像这样调用operator--
函数时,它的工作正常:
cout << a.operator--() << endl;
是什么给出的?它应该工作正常。
答案 0 :(得分:8)
对于重载postfix运算符,您需要在函数签名中指定一个伪int
参数,即还应该有一个operator--(int)
。您定义的是前缀减量运算符。有关详细信息,请参阅此FAQ。
答案 1 :(得分:8)
后缀运算符将int
作为参数,以区别于前缀运算符。
后缀:
int operator--(int)
{
}
前缀:
int operator--()
{
}