使用ifstream返回重载运算符的分段错误

时间:2015-05-13 09:20:15

标签: c++ file ifstream

我在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

该程序的目的是从文件中获取复杂的数字,并在它们之间添加运算符。

1 个答案:

答案 0 :(得分:2)

当你这样做时,你的程序会进入无限递归:

ifstream& operator>>(ifstream& file1,char &ch){
    file1>>ch;
    return file1;
}

第一行为operator>>调用相同的char,因此最终会出现堆栈溢出。

由于为operator>>定义了std::istream,并且因为std::ifstream可以传递给std::istream上的运营商,只需删除您的实施即可解决此问题({{3} })。