2017-05-13 40 views
0

我在一个类中做了一个运算符重载函数。 我做了另一个函数,它回顾了类中的重载函数。如何在C++中使用运算符重载函数?

我想用这使人想起在主要功能的操作重载函数,所以我在主函数中写了这样的功能:我有错误C2676

#include <iostream> 
... 

class Zealot { 
    int x; 

    .... 

    void operator++() {    
    Zealot s; 
    s.x = -50; 
    for (auto i = 0; i < 2; ++i, tail.push_back(s)); 
    } 

    void Collision() { 
     ... 
     (*this)++;   // Error : C2676 
     ... 
    } 
    ... 
}; 

Zealot z; 

int main() { 
    z.Coliision(); 
} 

所以我不能编译源代码。

我应该怎么做才好? 我需要你的大力帮助。

+3

你定义的运算符是'++'的前缀形式,所以你可以像'++(* this);'那样调用它。后缀形式通过类型为'int'的参数来区分(所以不用),所以它是:'void operator ++(int)'。请注意,'operator ++()'通常应该返回对刚增加的对象的引用。 –

+0

@Jerry Coffin谢谢你的帮助!我会牢记这一点。 – starrykss

回答

1

你重载的是预增值操作符。
你正在使用的是后增量操作符。

您可以使用预先递增运算符:

++(*this); 

或实施后增oprator:

void operator++(int) { ... } 

要习惯,你应该改变的返回值那些功能虽然。

Zealot& operator++() { ... } 
Zealot operator++(int) { ... } 

您可以在http://en.cppreference.com/w/cpp/language/operators上阅读有关操作员重载的更多信息。

+0

谢谢你的大力帮助!我解决了这个问题。 – starrykss

+0

@starrykss,不客气。 –