unaryOperators operator++ (const unaryOperators &one);
对于在类中声明的内容,我应该得到错误“太多的参数”等,但我得到的错误是:
error: postfix ‘unaryOperators unaryOperators::operator++(const unaryOperators&)’ must take ‘int’ as its argument
为什么 必须将'int'作为其参数 ?这是什么意思?
GCC Linux
答案 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
。