2015-12-27 6 views
0

Я хочу перегрузить оператора >> так, что когда я использую cin >> мне будет разрешено устанавливать атрибуты моего объекта, перегрузка < < работает, но не >>, вот мой code.`Перегрузка оператора C++ >> istream

#include <iostream> 
#include <cstdlib> 

using namespace std; 

class fraction{ 
    private: 
     int den; 
     int nom; 
    public: 
     fraction(){nom=0;den=1;} 
     fraction(int x,int y){nom=x;den=y;} 
     fraction(const fraction &); 
     ~fraction(); 
     friend ostream& operator<<(ostream &,const fraction &); 
     friend istream& operator>>(istream &,fraction &); 
     fraction operator*(const fraction &); 
     fraction operator/(const fraction &); 
     fraction operator+(const fraction &); 
     fraction operator-(const fraction &); 
     friend void simple(fraction &); 
}; 

istream operator>>(istream& is,fraction &v){ 
    is>>v.nom; 
    is>>v.den; 
    return is; 
} 

` А вот ошибка:

main.cpp: In function ‘std::istream operator>>(std::istream&, fraction&)’: 
main.cpp:10:7: error: ‘int fraction::nom’ is private 
main.cpp:53:4: error: within this context 
main.cpp:9:7: error: ‘int fraction::den’ is private 
main.cpp:54:4: error: within this context 
In file included from /usr/include/c++/4.7/ios:43:0, 
       from /usr/include/c++/4.7/ostream:40, 
       from /usr/include/c++/4.7/iostream:40, 
       from main.cpp:1: 
/usr/include/c++/4.7/bits/ios_base.h: In copy constructor ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’: 
/usr/include/c++/4.7/bits/ios_base.h:788:5: error:  ‘std::ios_base::ios_base(const std::ios_base&)’ is private 
In file included from /usr/include/c++/4.7/ios:45:0, 
       from /usr/include/c++/4.7/ostream:40, 
       from /usr/include/c++/4.7/iostream:40, 
       from main.cpp:1: 
/usr/include/c++/4.7/bits/basic_ios.h:64:11: error: within this context 
In file included from /usr/include/c++/4.7/iostream:41:0, 
       from main.cpp:1: 
/usr/include/c++/4.7/istream: In copy constructor ‘std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)’: 
/usr/include/c++/4.7/istream:56:11: note: synthesized method ‘std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)’ first required here 
main.cpp: In function ‘std::istream operator>>(std::istream&, fraction&)’: 
main.cpp:55:9: note: synthesized method ‘std::basic_istream<char>::basic_istream(const std::basic_istream<char>&)’ first required here 

Может кто-нибудь сказать мне, что случилось?

+4

Существует '&' отсутствует после 'istream', что приводит к тому, что оператор не соответствует объявленному другу. –

+0

Спасибо xD. Я не обращал на это внимания, я не знаю, как это сделать. Спасибо. – user5720970

ответ

2

Объявить заголовок функции для перегруженного оператора следующим образом:

istream &operator>>(istream& is,fraction &v){ 

& не хватает для возвращаемого значения.