代码块上的 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 是一个副本,它是预递增对象的状态。
第 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 是一个副本,它是预递增对象的状态。