错误:后缀'unaryOperators unaryOperators :: operator ++(const unaryOperators&)'必须以'int'作为参数

时间:2012-01-03 11:58:54

标签: c++ operator-overloading

unaryOperators operator++ (const unaryOperators &one);
对于在类中声明的内容,我应该得到错误“太多的参数”等,但我得到的错误是:

error: postfix ‘unaryOperators unaryOperators::operator++(const unaryOperators&)’ must take ‘int’ as its argument

为什么 必须将'int'作为其参数 ?这是什么意思?

GCC Linux

4 个答案:

答案 0 :(得分:5)

增量,后缀和前缀有2个不同的运算符。

postfix的重载需要一个伪int参数来区分它。

T& operator ++(T& a);     //prefix
T operator ++(T& a, int); // postfix

答案 1 :(得分:5)

来自here

  

由于前缀和后缀++运算符可以有两个定义,因此C ++语言为我们提供了两种不同的签名。两者都称为operator ++(),但前缀版本不带参数,后缀版本带虚拟int。

答案 2 :(得分:3)

有两个++运营商。一个采用零参数(前缀),另一个采用单个int参数(后缀)。编译器认为你想要第二个(注意错误消息中的'postfix'一词),它告诉你参数类型是错误的。从你的困惑看,似乎编译器试图提供帮助是错误的,你实际上想要第一个。

答案 3 :(得分:2)

假设你想重载前缀运算符(++x),可以这样做:

  • 不带参数的非静态成员函数operator++();或
  • 具有一个参数operator++(const unaryOperators &)
  • 的非成员函数

如果将其声明为带参数的成员函数,则将其解释为后缀运算符的声明(x++);但是,必须使用类型为int的伪参数声明后缀运算符,而不是类型,因此错误。

因此,要么删除函数参数,要让操作符作用于this;或者将功能移到课堂外;如果需要访问类型的私有,请将其设为friend