I'm getting this infamous error when i try to compile this...
fraction\fraction.h(18) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
client.cpp
fraction\fraction.h(17) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'msc1.cpp', line 1786)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
Code:#ifndef FRACTION_H #define FRACTION_H #include <iostream> using namespace std; 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 const Fraction operator+ (const Fraction& x, const Fraction& y); friend const Fraction operator- (const Fraction& x, const Fraction& y); friend const Fraction operator* (const Fraction& x, const Fraction& y); friend const Fraction operator/ (const Fraction& x, const Fraction& y); friend bool operator == (const Fraction& x, const Fraction& y); friend const Fraction operator- (const Fraction&); friend ostream& operator<< (ostream& x, const Fraction& y); friend istream& operator>> (istream& x, Fraction& y); private: void reduce(); int gcd(int, int); int numerator, denominator; }; #endif ---------------------------- #include <iostream> #include <cmath> #include <string> #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; } const Fraction operator+ (const Fraction& f1, const Fraction& f2) { int d3 = f1.denominator * f2.denominator; int n1 = f2.denominator * f1.numerator; int n2 = f1.denominator * f2.numerator; int n3 = n1 + n2; Fraction f(n3, d3); f.reduce(); return f; } const Fraction operator- (const Fraction& f1, const Fraction& f2) { int d3 = f1.denominator * f2.denominator; int n1 = f2.denominator * f1.numerator; int n2 = f1.denominator * f2.numerator; int n3 = n1 - n2; Fraction f(n3, d3); f.reduce(); return f; } const Fraction operator* (const Fraction& f1, const Fraction& f2) { int n3 = f1.numerator * f2.numerator; int d3 = f1.denominator * f2.denominator; Fraction f(n3, d3); f.reduce(); return f; } const Fraction operator/ (const Fraction& f1, const Fraction& f2) { int n3 = f1.numerator * f2.denominator; int d3 = f1.denominator * f2.numerator; Fraction f(n3, d3); f.reduce(); return f; } bool operator== (const Fraction& f1, const Fraction& f2) { int a = f1.numerator * f2.denominator; int b = f1.denominator * f2.numerator; return a == b; } const Fraction operator- (const Fraction& f1) { int n = -f1.numerator; int d = f1.denominator; if ((n < 0) && (d < 0)) { -n; -d; } else if (d < 0) { -n; -d; } Fraction f(n, d); return f; } void Fraction::reduce() { int g = gcd(abs(numerator), abs(denominator)); numerator /= g; denominator /= g; } 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; } int Fraction::gcd(int x, int y) { if (x % y == 0) return y; return gcd(y, x % y); } -------------------- #include <iostream> using namespace std; #include "fraction.h" int main() { fraction first(1, 2); fraction second (2,4); fraction result=first+second; return 0; }



LinkBack URL
About LinkBacks


