运算符重载c ++>> istream的

时间:2015-12-27 16:44:02

标签: c++ operator-overloading

我想重载运算符>>所以当我使用cin>>我将被允许设置我的对象的属性,<<<<<<<<<正在工作,但不是>>,这是我的代码。

#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 

谁能告诉我什么错了?

1 个答案:

答案 0 :(得分:2)

为重载运算符声明函数头,如下所示:

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

&amp;因返回值而丢失。