我遇到运算符重载问题。
我有一个名为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
答案 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)
您的代码需要ofstream
和ifstream
,它们是基于文件的流。您应该使用不太具体的ostream
和istream
。