c2676 - 二进制' ++'没有定义此运算符

时间:2018-04-07 20:09:55

标签: c++ oop visual-studio-2015

我无法编译下面的代码,但是我可以使用另一台笔记本电脑在visual studio下编译它,如果设置了不同的配置,我就不会这样做

#include<iostream>
using namespace std;
class Unary {
private:
    int x, y;

public:
    Unary(int i = 0, int j = 0) {
        x = i;
        y = j;
    }
    void show()
    {
        cout << x << " " << y << endl;
    }
    void operator++()
    {
        x++;
        y++;
    }
};

int main() {
    Unary v(10, 20);
    v++;
    v.show();
}

并且它给出了以下错误:

Error C2676: binary '++': 'Unary' does not define this operator or a conversion to a type acceptable to the predefined operator

1 个答案:

答案 0 :(得分:4)

运算符++实际上有两个含义,具体取决于它是用作前缀还是用作后缀运算符。当以一种方式或另一种方式使用时,函数C ++期望在类中定义的约定如下:

class Unary {
  public:
    Unary& operator++ ();    // prefix ++: no parameter, returns a reference
    Unary operator++ (int);  // postfix ++: dummy parameter, returns a value
};

您的函数void operator++()不符合此约定,这就是错误出现的原因。

实施可能如下所示:

Unary Unary::operator++(int)
{
    x++;
    y++;
    return *this;
}