2015-08-04 3 views
-2

У меня проблема с перегрузкой оператора. У меня есть класс с именем Point1, который определяется какнет совпадений для оператора >> с типами операндов ifstream и double

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; 

Я использую GCC 4.9.3 на Debian тестирование (armv7l). Полный исходный код можно найти здесь: http://hastebin.com/igunaquxiw.cpp

+0

И мы все должны знать, что такое 'in'? – juanchopanza

+1

Ошибок не отправлено, нет [mvce] (http://stackoverflow.com/help/mcve), -1. – user657267

+0

in is ifstream & and pnt - Point1 & – Morten

ответ

7

У вас есть перегруженные операторы потока для файлов, но вы не используете файлы ввода/вывода, но консольный ввод.

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/cinhttp://en.cppreference.com/w/cpp/io/basic_ifstreamhttp://en.cppreference.com/w/cpp/io/basic_istream

Cin имеет тип IStream но нет оператора для этого типа существует только оператор для ifstream.

3

Ваш код ожидает ofstream и ifstream, которые являются файловыми потоками. Вместо этого вы должны использовать менее конкретные ostream и istream.

Смежные вопросы