代码块上的 C++ 简单运算符重载程序。在第 19 行出错。同样的程序在 Turbo C++ 上完美运行

A simple operator overloading program in C++ on codeblocks. Got an error at line 19. The same program runs perfectly on Turbo C++

第 19 行出现错误: 错误:没有为后缀“++”声明 'operator++(int)' [-fpermissive]

#include<bits/stdc++.h>
using namespace std;
class sample
{
    int x,y;
public:
    sample(){x=y=0;}
    void display()
    {
        cout<<endl<<"x="<<x<<" and y= "<<y;
    }
    void operator ++(){x++;y++;}
};

int main()
{
    sample s1;
    sample s2;
    s1++;
    ++s2;
    ++s1;
    s1.display();
    s2.display();
    return 0;
}

代码行错误:

s1++;

TURBO C++?好久没听过这个名字了。那是C++标准化之前时代的编译器,已经不能代表C++了

前缀增量和post-增量是不同的函数。您不能只让其中一个过载并期望两者都能正常工作。

另外你的签名有误。它应该 return 一个匹配它被调用的 class 的类型。例如:

class sample
{
public:
...
    // prefix
    sample & operator ++()  {x++; y++; return *this; }

    // postfix (the int is a dummy just to differentiate the signature)
    sample operator ++(int) {
        sample copy(*this); 
        x++; y++; 
        return copy;
    }
};

return 类型的值是两者之间的主要区别,因此您的操作员 return void 毫无意义。一个 return 是一个引用,因为它代表递增的对象,而 post 修复版本 return 是一个副本,它是预递增对象的状态。