我在ubuntu中用c ++编写了这个程序。我写了2个操作符过载,如波纹管。但我收到了#34;分段错误(核心转储)"。我该怎么办?
#include<iostream>
#include<fstream>
using namespace std;
class Complex{
private:
double x;
double y;
public:
Complex(double a,double b){
x=a;
y=b;
}
void setx(double a){
x=a;
}
void sety(double b){
y=b;
}
double getx(){
return x;
}
double gety(){
return y;
}
};
ifstream& operator>>(ifstream& file1,Complex &c){
double d,e;
file1>>d>>e;
c.setx(d);
c.sety(e);
return file1;
}
ifstream& operator>>(ifstream& file1,char &ch){
file1>>ch;
return file1;
}
int main(){
Complex c1(1,2);
Complex c2(1,2);
char ch;
ifstream file("input.data",ios::in);
file>>c1>>ch>>c2;
return 0;
}
在input.data中我有类似下面的内容:
1 4 + 2 3
3 1 - 4 8
该程序的目的是从文件中获取复杂的数字,并在它们之间添加运算符。
答案 0 :(得分:2)
当你这样做时,你的程序会进入无限递归:
ifstream& operator>>(ifstream& file1,char &ch){
file1>>ch;
return file1;
}
第一行为operator>>
调用相同的char
,因此最终会出现堆栈溢出。
由于为operator>>
定义了std::istream
,并且因为std::ifstream
可以传递给std::istream
上的运营商,只需删除您的实施即可解决此问题({{3} })。