472,988 Members | 2,568 Online

error: no match for 'operator>>' in 'ins >>
target->abrowning_rational::Rational::numerator'

Below is the .h file:

#ifndef RATIONAL
#define RATIONAL
#include <iostream>

namespace abrowning_rational{

class Rational{

public:

//CONSTRUCTOR for the rational class
Rational();
Rational(int a, int b);

//CONSTANT MEMBER FUNCTIONS for the Rational class
int getNum () const {return numerator;} // Gets numerator
int getDen () const {return denominator;} // Gets denominator

//MODIFICATION MEMBER FUNCTIONS for the rational class
int gcd(int a, int b); // returns GCD using euclidean algorithm

//Friend Functions
friend std::istream& operator >> (std::istream& ins, const
Rational& target);

private:

int numerator;
int denominator;

};

//NONMEMBER FUNCTIONS for the Rational class
Rational operator + (const Rational& r1, const Rational& r2);
Rational operator - (const Rational& r1, const Rational& r2);
Rational operator * (const Rational& r1, const Rational& r2);
Rational operator / (const Rational& r1, const Rational& r2);
bool operator == (const Rational& r1, const Rational& r2);
bool operator != (const Rational& r1, const Rational& r2);
bool operator >= (const Rational& r1, const Rational& r2);
bool operator <= (const Rational& r1, const Rational& r2);
bool operator > (const Rational& r1, const Rational& r2);
bool operator < (const Rational& r1, const Rational& r2);
std::ostream& operator << (std::ostream& outs, const Rational&
source);

}

#endif //RATIONAL_H
~
And now the implementation of the overloaded input operator:

std::istream& operator >> (std::istream& ins, const Rational& target){
//Postcondition: target is read from ins. the return value is
//istream ins. Library facility used is iostream

ins >> target.numerator >> target.denominator;
return ins;
}
If i comment out the " ins >> target.numerator >>
target.denominator; " line

Mar 21 '06 #1
8 2554
andrew browning wrote:

error: no match for 'operator>>' in 'ins >>
target->abrowning_rational::Rational::numerator'

Below is the .h file:

#ifndef RATIONAL
#define RATIONAL
#include <iostream>

namespace abrowning_rational{

class Rational{

public:

//CONSTRUCTOR for the rational class
Rational();
Rational(int a, int b);

//CONSTANT MEMBER FUNCTIONS for the Rational class
int getNum () const {return numerator;} // Gets numerator
int getDen () const {return denominator;} // Gets denominator

//MODIFICATION MEMBER FUNCTIONS for the rational class
int gcd(int a, int b); // returns GCD using euclidean algorithm

//Friend Functions
friend std::istream& operator >> (std::istream& ins, const
Rational& target);

private:

int numerator;
int denominator;

};

//NONMEMBER FUNCTIONS for the Rational class
Rational operator + (const Rational& r1, const Rational& r2);
Rational operator - (const Rational& r1, const Rational& r2);
Rational operator * (const Rational& r1, const Rational& r2);
Rational operator / (const Rational& r1, const Rational& r2);
bool operator == (const Rational& r1, const Rational& r2);
bool operator != (const Rational& r1, const Rational& r2);
bool operator >= (const Rational& r1, const Rational& r2);
bool operator <= (const Rational& r1, const Rational& r2);
bool operator > (const Rational& r1, const Rational& r2);
bool operator < (const Rational& r1, const Rational& r2);
std::ostream& operator << (std::ostream& outs, const Rational&
source);

}

#endif //RATIONAL_H
~
And now the implementation of the overloaded input operator:

std::istream& operator >> (std::istream& ins, const Rational& target){
//Postcondition: target is read from ins. the return value is
//istream ins. Library facility used is iostream

ins >> target.numerator >> target.denominator;
return ins;
}
If i comment out the " ins >> target.numerator >>
target.denominator; " line

Please remove irrelevant parts, then post _the_entire_code_ that fails
to compile. The reason is most likely in the fact that you declare the
friend function one way and define it some other way. Since you don't
show how (or, rather, where), nothing special can be said about it.

V
--
Mar 21 '06 #2
- Remove the 'const' from the second parameter of the operator >>()
definition.
- Declare operator >> as friend of Rational otherwise it will not have

Mar 21 '06 #3
Ok you already have the friend, so just remove the const ;)

Mar 21 '06 #4
thanks. i removed the const but then got an errors saying the
numerator and denominator were private and that there was an error
within that context:

Rational.cpp: In function 'std::istream&
abrowning_rational::operator>>(std::istream&,
abrowning_rational::Rational&)':
Rational.h:32: error: 'int abrowning_rational::Rational::numerator' is
private
Rational.cpp:36: error: within this context
Rational.h:33: error: 'int abrowning_rational::Rational::denominator'
is private
Rational.cpp:36: error: within this context

Mar 21 '06 #5
Did you also remove the const from the friend declaration?

Mar 21 '06 #6
just did and it rocked!!!! thanks ever so much for your help, it was
very gracious of you

Mar 21 '06 #7
tm*****@gmail.com wrote:
Did you also remove the const from the friend declaration?

Brian
Mar 21 '06 #8
andrew browning wrote:
just did and it rocked!!!! thanks ever so much for your help, it was
very gracious of you