不匹配运营商>>操作数类型ifstream和double

时间:2015-08-04 06:17:00

标签: c++

我遇到运算符重载问题。 我有一个名为Point1的类,定义为

class Point1 {
private:
    long double x;
public:
    Point1(): x(0) {}
    Point1(long double val): x(val) {}
    Point1(Point1 & val): x(val.x) {}
    //Some functions omitted
    friend ofstream& operator<< (ofstream&, const Point1&);
    friend ifstream& operator>> (ifstream&, Point1&);
};

该课程正在运作,代表operator>>(ifstream&, Point1&);,其功能主体是:

double tmp;
in >> tmp; //In this line g++ breaks with an error
pnt.x=tmp;
return in;

我在debian测试中使用gcc 4.9.3(armv7l)。 完整的源代码可以在这里找到:http://hastebin.com/igunaquxiw.cpp

2 个答案:

答案 0 :(得分:7)

您为文件重载了流操作符,但您没有使用文件I / O而是控制台输入。

cin >> pnt >> pnt2;

更改为

friend ostream& operator<< (ostream& s, const Point1& p)
{
    s << p.x;
    return s;
}
friend istream& operator>> (istream& s, Point1& p)
{
    s >> p.x;
    return s;
}

如果你在这里比较类型,那么cin操作的重载类型错误,一些信息 http://en.cppreference.com/w/cpp/io/cin http://en.cppreference.com/w/cpp/io/basic_ifstream http://en.cppreference.com/w/cpp/io/basic_istream

Cin的类型为istream,但此类型没有运算符,ifstream只有运算符。

答案 1 :(得分:3)

您的代码需要ofstreamifstream,它们是基于文件的流。您应该使用不太具体的ostreamistream