Saturday, May 9, 2009

Need help fixing the errors in this Template C++Program. I'm lost.Seems to be the same error repeatedly.Thanks

#include %26lt;iostream%26gt;


using namespace std;





template %26lt;class T%26gt;


class Complex


{


friend ostream %26amp;operator%26lt;%26lt;( ostream %26amp;, const Complex %26amp; );


friend istream %26amp;operator%26gt;%26gt;( istream %26amp;, Complex %26amp; );


public:


Complex(const T = 0.0, const T = 0.0 ); // constructor


T%26amp; operator+( const Complex%26amp; ) const; // addition


T%26amp; operator-( const Complex%26amp; ) const; // subtraction


T%26amp; operator*( const Complex%26amp; ) const; // multiplication


T%26amp; operator=( const Complex%26amp; ); // assignment


T%26amp; operator==( const Complex%26amp; ) const;


T%26amp; operator!=( const Complex%26amp; ) const;


// T%26amp; operator[](double);





private:


double real; // real part


double imaginary; // imaginary part


};








// Constructor


template %26lt;class T%26gt;


Complex%26lt;T%26gt;::Complex(T r, T i)


{


T real = r;


T imaginary = i;


}





// Overloaded addition operator





template %26lt;class T%26gt;


T %26amp;Complex%26lt;T%26gt;::operator+(const Complex %26amp;operand2) const


{


Complex sum;





sum.real = real + operand2.real;


sum.imaginary = imaginary + operand2.imaginary;





return sum;


}


// Overloaded subtraction operator





template %26lt;class T%26gt;


T %26amp;Complex%26lt;T%26gt;::operator-(const Complex %26amp;operand2) const


{


Complex diff;





diff.real = real - operand2.real;


diff.imaginary = imaginary - operand2.imaginary;


return diff;


}





// Overloaded multiplication operator


template %26lt;class T%26gt;


T %26amp;Complex %26lt;T%26gt;::operator*(const Complex %26amp;operand2 ) const


{


Complex times;





times.real = real * operand2.real + imaginary * operand2.imaginary;


times.imaginary = real * operand2.imaginary + imaginary * operand2.real;


return times;


}





// Overloaded = operator


template %26lt;class T%26gt;


T %26amp;Complex%26lt;T%26gt;::operator=(const Complex %26amp;right )


{


real = right.real;


imaginary = right.imaginary;


return *this; // enables concatenation


}





template %26lt;class T%26gt;


T %26amp;Complex%26lt;T%26gt;::operator==( const Complex %26amp;right ) const


{ return right.real == real %26amp;%26amp; right.imaginary == imaginary ? true : false; }





template %26lt;class T%26gt;


T %26amp;Complex%26lt;T%26gt;::operator!=( const Complex %26amp;right ) const


{ return !( *this == right ); }





template %26lt;class T%26gt;


ostream%26amp; operator%26lt;%26lt;( ostream %26amp;output, const Complex%26lt;T%26gt; %26amp;complex )


{


output %26lt;%26lt; complex.real %26lt;%26lt; " + " %26lt;%26lt; complex.imaginary %26lt;%26lt; 'i';


return output;


}





template %26lt;class T%26gt;


istream%26amp; operator%26gt;%26gt;( istream %26amp;input, Complex%26lt;T%26gt; %26amp;complex )


{


input %26gt;%26gt; complex.real;


input.ignore( 3 ); // skip spaces and +


input %26gt;%26gt; complex.imaginary;


input.ignore( 2 );





return input;


}








//Use the following main function to test your program


int main()


{


double a=4.3, b = 8.2, c = 3.3, d = 1.1;


Complex%26lt;double%26gt; x, y(a,b), z(c,d), k;





cout %26lt;%26lt; "Enter a complex number in the form: a + bi\n? ";


cin %26gt;%26gt; k;


cout %26lt;%26lt; "x: " %26lt;%26lt; x %26lt;%26lt; "\ny: " %26lt;%26lt; y %26lt;%26lt; "\nz: " %26lt;%26lt; z %26lt;%26lt; "\nk: "


%26lt;%26lt; k %26lt;%26lt; '\n';


(x = y + z);


cout %26lt;%26lt; "\nx = y + z:\n" %26lt;%26lt; x %26lt;%26lt; " = " %26lt;%26lt; y %26lt;%26lt; " + " %26lt;%26lt; z %26lt;%26lt; '\n';


(x = y - z);


cout %26lt;%26lt; "\nx = y - z:\n" %26lt;%26lt; x %26lt;%26lt; " = " %26lt;%26lt; y %26lt;%26lt; " - " %26lt;%26lt; z %26lt;%26lt; '\n';


(x = y * z);


cout %26lt;%26lt; "\nx = y * z:\n" %26lt;%26lt; x %26lt;%26lt; " = " %26lt;%26lt; y %26lt;%26lt; " * " %26lt;%26lt; z %26lt;%26lt; "\n\n";


if ( x != k )


cout %26lt;%26lt; x %26lt;%26lt; " != " %26lt;%26lt; k %26lt;%26lt; '\n';


cout %26lt;%26lt; '\n';


x = k;


if ( x == k )


cout %26lt;%26lt; x %26lt;%26lt; " == " %26lt;%26lt; k %26lt;%26lt; '\n';





int e=4, f=8, g=3, h=2;


Complex%26lt;int%26gt; l, m( e,f), n(g,h ), p;





cout %26lt;%26lt; "Enter a complex number in the form: a + bi\n? ";


cin %26gt;%26gt; p;


cout %26lt;%26lt; "x: " %26lt;%26lt; l %26lt;%26lt; "\ny: " %26lt;%26lt; m %26lt;%26lt; "\nz: " %26lt;%26lt; n %26lt;%26lt; "\nk: "


%26lt;%26lt; p %26lt;%26lt; '\n';


(l = m + n);


cout %26lt;%26lt; "\nx = y + z:\n" %26lt;%26lt; l %26lt;%26lt; " = " %26lt;%26lt; m %26lt;%26lt; " + " %26lt;%26lt; n %26lt;%26lt; '\n';


(l = m - n);


cout %26lt;%26lt; "\nx = y - z:\n" %26lt;%26lt; l %26lt;%26lt; " = " %26lt;%26lt; m %26lt;%26lt; " - " %26lt;%26lt; n %26lt;%26lt; '\n';


(l = m * n);


cout %26lt;%26lt; "\nx = y * z:\n" %26lt;%26lt; l %26lt;%26lt; " = " %26lt;%26lt; m %26lt;%26lt; " * " %26lt;%26lt; n %26lt;%26lt; "\n\n";


if ( l != p )





cout %26lt;%26lt; l %26lt;%26lt; " != " %26lt;%26lt; p %26lt;%26lt; '\n';


cout %26lt;%26lt; '\n';


l = p;


if ( l == p )


cout %26lt;%26lt; l %26lt;%26lt; " == " %26lt;%26lt; p %26lt;%26lt; '\n';








return 0;


}

Need help fixing the errors in this Template C++Program. I'm lost.Seems to be the same error repeatedly.Thanks
Haven't compiled your code, but looking at the definitions:





-Your +,-,* operators should return Complex%26lt;T%26gt;, not T - when you add two Complex%26lt;T%26gt;, you want to get a Complex%26lt;T%26gt; object and not a T object back.





-Your ==,!= operators should return bool, as these are logical operators.





-Your private members should be of type T - otherwise, when you assign them, you are implicitly saying that T is a specific type.





-In your constructor, you are redeclaring your members; use something like





Complex( T r, T i ) : real( r ), imaginary( i ) { }





to initialize them.





-In your operator implementations, you need to set a type for your return object. You'll need to declare them as Complex%26lt;T%26gt; objects, not just Complex.
Reply:It might help to know what the error message is./


No comments:

Post a Comment