i tired to use friend for << operator in Visual c++ but it gives me error that i cant access private variable in the class
can anyone help me how to fix this problem
thx u
here is examples of a simple program that is perfectly legal but n0t in visual c++
Code:// Fraction.cpp #include <iostream> #include <cmath> #include "Fraction.h" using namespace std; Fraction::Fraction() : numerator(0), denominator(1) { } Fraction::Fraction(int n) : numerator(n), denominator(1) { } Fraction::Fraction(int n, int d) { if (0 == d) { cout << "Illegal value for denominator" << endl; exit(1); } numerator = n; denominator = d; reduce(); } void Fraction::reduce() { int g = gcd(abs(numerator), abs(denominator)); numerator /= g; denominator /= g; } //ERROR in Visual C++ here, Can't access private variable ostream& operator<< (ostream& output, const Fraction& f1) { if (((f1.numerator < 0) || (f1.denominator < 0)) && !((f1.numerator < 0) && (f1.denominator < 0))) output << " - "; output << abs(f1.numerator) << " / " << abs(f1.denominator); return output; } istream& operator>> (istream& input, Fraction& f1) { int n, d; char ch; input >> n >> ch >> d; if (ch != '/') { cout << "Fraction format error." << endl; exit(1); } if (0 == d) { cout << "Illegal value for denominator." << endl; exit(1); } f1.numerator = n; f1.denominator = d; return input; } // Helper funtion which returns gcd of two numbers int Fraction::gcd(int x, int y) { if (x % y == 0) return y; return gcd(y, x % y); }Code:// Fraction.h #ifndef FRACTION_H #define FRACTION_H class Fraction { public: Fraction(); Fraction(int); Fraction(int, int); double getFraction() const {return ((double) numerator / denominator);} int getNumerator() const {return numerator;} int getDenominator() const {return denominator;} friend ostream& operator<< (ostream&, const Fraction&); friend istream& operator>> (istream&, Fraction&); private: void reduce(); static int gcd(int, int); int numerator, denominator; }; #endif



LinkBack URL
About LinkBacks


