在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++() ,所以就解决了。

链接地址: http://www.djcxy.com/p/73143.html

上一篇: Post increment in operator overloading in c++

下一篇: Why can't a Visual C++ interface contain operators?