在c ++中增加运算符重载
这是我的后增量运算符重载声明。
loc loc::operator++(int x)
{
loc tmp=*this;
longitude++;
latitude++;
retrun tmp;
}
我的类构造函数
loc(int lg, int lt)
{
longitude = lg;
latitude = lt;
}
在主要功能中,我编码如下
int main()
{
loc ob1(10,5);
ob1++;
}
编译这个时,我得到下面的错误
opover.cpp:56:5:error:'loc loc :: operator ++(int)'的原型不匹配类'loc'中的任何opover.cpp:49:5:error:candidate is:loc loc :: operator ++( )opover.cpp:在函数'int main()':opover.cpp:69:4:error:no'operator ++(int)'声明为后缀'++'
修复你的类声明
class loc
{
// ...
loc operator++();
}
至
class loc
{
// ...
loc operator++(int);
}
[ 编辑删除了关于按值返回的错误评论。 按值返回当然是postfix operator ++的通常语义]
你应该有两个版本的++
:
loc& loc::operator++() //prefix increment (++x)
{
longitude++;
latitude++;
return *this;
}
loc loc::operator++(int) //postfix increment (x++)
{
loc tmp(longtitude, langtitude);
operator++();
return tmp;
}
当然,这两个函数都应该在类的原型中定义:
loc& operator++();
loc operator++(int);
你没有在类定义中声明重载操作符。
你的班级应该是这样的:
class loc{
public:
loc(int, int);
loc operator++(int);
// whatever else
}
**编辑**
在阅读完评论后,我注意到在你的错误信息中,它显示你声明了loc operator++()
,所以就解决了。