By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,433 Members | 1,844 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,433 IT Pros & Developers. It's quick & easy.

friend ostream& operator <<, compiles and runs in Dev++ no output or error in Borland

P: n/a
I'm in the process of writing this program for complex numbers and I
use DevC++. My professor on the other hand compiles on Borland 5.5. So
I ocasionally save and run my work on Borland to see if it caught
anything, it's very picky... Anyway, the code below works on Dev, and
it compiles fine on Borland, but when I run it from borland, there is
no output, no error, it just skips right over the freind ostream call.
HELP! I'm new to this and so far it's been a very trying experience...
any help would be greatly appreciated. Rick

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cctype>
#include<cmath>
using namespace std;

//Class for complex numbers.
class Complex
{
public:
friend Complex operator +(const Complex& left, const Complex&
right);
friend Complex operator -(const Complex& left, const Complex&
right);
friend Complex operator *(const Complex& left, const Complex&
right);
friend bool operator ==(const Complex& left, const Complex&
right);
//overloaded operators

Complex(char in1[], char in2[]);//inputs taken in as Cstrings
Complex(char in1[]);
Complex();

void get_first(char ansr1[]);//returns doubles of first string
void get_secon(char ansr2[]);//returns doubles of second string
void foil(double lr, double li, double rr, double ri);
//Performs multiplication of 2 imaginary numbers
friend ostream& operator <<(ostream& outs, const Complex&
number);

private:
char answer[20];
char l_sign;
double l_real;
double l_imaginary;
char r_sign;
double r_real;
double r_imaginary;
double real_result1;
double imaginary_result1;
double real_result2;
double imaginary_result2;
double real_result3;
double imaginary_result3;
};
int main()
{
system("cls");
char answer1[80], answer2[80];
int x;
do
{
cout << "\n" << "Enter a complex number in the form of a + bi: ";
cin.getline(answer1,80);
cout << "\n" << "Enter the second complex number (Enter for
default): ";
cin.getline(answer2,80);
if (answer2[0] == '\0')
{
break;
}
Complex start(answer1, answer2);
cout << "\n" << start;
return 0;
}while(x==1);

Complex start(answer1);
cout << "\n" << start;
return 0;
}

Complex operator +(const Complex& left, const Complex& right)
{
return(left + right);
}

Complex operator -(const Complex& left, const Complex& right)
{
return(left - right);
}

Complex operator *(const Complex& left, const Complex& right)
{

return(left * right);

}

bool operator ==(const Complex& left, const Complex& right)
{

return(left == right);
}

Complex::Complex(char in1[], char in2[])
{

get_first(in1);
get_secon(in2);

if (!strcmp(in1, in2))
{
strcpy(answer, "equal");
}
else
{
strcpy(answer, "not equal");
}
real_result1 = (l_real + r_real);
imaginary_result1 = (l_imaginary + r_imaginary);
real_result2 = (l_real - r_real);
imaginary_result2 = (l_imaginary - r_imaginary);
foil(l_real, l_imaginary, r_real, r_imaginary);
}

Complex::Complex(char in1[]) : r_real(5), r_imaginary(2), r_sign('+')
{
get_first(in1);
if (l_real == r_real && l_imaginary == r_imaginary)
{
strcpy(answer, "equal");
}
else
{
strcpy(answer, "not equal");
}
real_result1 = (l_real + r_real);
imaginary_result1 = (l_imaginary + r_imaginary);
real_result2 = (l_real - r_real);
imaginary_result2 = (l_imaginary - r_imaginary);
foil(l_real, l_imaginary, r_real, r_imaginary);
}

Complex::Complex()
{

}

void Complex::get_first(char ansr1[])
{
char ans2[80], ans3[2], ans4[80], hold[80];
int x=0, y=0;
while(ansr1[x] != '+' && ansr1[x] != '-' || x == 0)
{
ans2[y] = ansr1[x];
x = x+1;
y = y+1;
}
ans2[y] = '\0';
y=0;
ans3[y] = ansr1[x];
x = x+1;
y=y+1;
ans3[y] = '\0';
y=0;

while(ansr1[x] != 'i')
{
ans4[y] = ansr1[x];
x = x+1;
y = y+1;
}
ans4[y] = '\0';

l_real = atof(ans2);
strcat(ans3, ans4);
l_imaginary = atof(ans3);
l_sign = ans3[0];

}

void Complex::get_secon(char ansr2[])
{
char ans2[80], ans3[2], ans4[80], hold[80];
int x=0, y=0;
while(ansr2[x] != '+' && ansr2[x] != '-' || x == 0)
{
ans2[y] = ansr2[x];
x = x+1;
y = y+1;
}
ans2[y] = '\0';
y=0;
ans3[y] = ansr2[x];
x = x+1;
y=y+1;
ans3[y] = '\0';
y=0;

while(ansr2[x] != 'i')
{
ans4[y] = ansr2[x];
x = x+1;
y = y+1;
}
ans4[y] = '\0';

r_real = atof(ans2);
strcat(ans3, ans4);
r_imaginary = atof(ans3);
r_sign = ans3[0];

}

void Complex::foil(double lr, double li, double rr, double ri)
{
double hold1, hold2;
hold1 = (lr * rr) + ((li * ri)*-1);
hold2 = (li * rr) + (lr * ri);
real_result3 = hold1;
imaginary_result3 = hold2;
}
ostream& operator <<(ostream& outs, const Complex& number)
{

outs << "\n" << "Numbers started with: " << number.l_real <<
number.l_sign
<< abs(number.l_imaginary) << "i" << " and " << number.r_real
<< number.r_sign
<< abs(number.r_imaginary) << "i" << "." << "\n" << "\n" <<
"Added they equal: "
<< number.real_result1 << "+" << number.imaginary_result1 <<
"i" << endl
<< "Subtracted they equal: " << number.real_result2 << "+" <<
number.real_result2
<< "i" << endl << "Multiplied they equal: " <<
number.real_result3 << "+"
<< number.imaginary_result3 << "i" << endl << "They are " <<
number.answer << "."
<< "\n" << endl;

return outs;
}

Nov 22 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
There are many issues with your code. Why does your Complex class have
so many members and things irrelevant to complex numbers? (By the way
did you know the standard already has a complex?)

One clear error in your code is here:

Rock wrote:
Complex operator +(const Complex& left, const Complex& right)
{
return(left + right);
}

that is simply recursing ad-infinitum.

Nov 22 '05 #2

P: n/a
It's a non-finished homework assignment, written by a 4 week old (in
C++ that is). When completed, the user will enter two imaginary
numbers in the fomat a+bi, and the program will add, subtract, multiply
and check for eqality of the two inputs. Anyway, my question/problem is
with the member function:

friend ostream& operator <<(ostream& outs, const Complex& number);

taking me to this output line:

ostream& operator <<(ostream& outs, const Complex& number)
{

outs << "\n" << "Numbers started with: " << number.l_real <<
number.l_sign
<< abs(number.l_imaginary) << "i" << " and " << number.r_real
<< number.r_sign
<< abs(number.r_imaginary) << "i" << "." << "\n" << "\n" <<
"Added they equal: "
<< number.real_result1 << "+" << number.imaginary_result1 <<
"i" << endl
<< "Subtracted they equal: " << number.real_result2 << "+" <<
number.real_result2
<< "i" << endl << "Multiplied they equal: " <<
number.real_result3 << "+"
<< number.imaginary_result3 << "i" << endl << "They are " <<
number.answer << "."
<< "\n" << endl;
return outs;
This menagerie compiles and runs on DevC++, however, when compiled on
Borland 5.5, it compiles fine, but when run, it takes the two inputs
and promptly (no puns intended) returns to the command prompt with no
errors and no output....nothing....

Nov 22 '05 #3

P: n/a
Hi Rock,

I suggest you cut your code back to something basic like:

#include <iostream>

using namespace std;

class Complex
{
public:
Complex(long& r, long& i):real(r), imaginary(i) {};
friend ostream& operator << (ostream& outs, const Complex& number);

private:
long real;
long imaginary;
};

ostream& operator << (ostream& outs, const Complex& number)
{

outs << number.real << " + " << number.imaginary << "i";
return outs;
}

int main ()
{
long real, imaginary;
cout << endl << "Enter a complex number in the form of a + bi: " <<
endl;
cout << "Enter real part" << endl;
cin >> real;
cout << "Enter imaginary part" << endl;
cin >> imaginary;
Complex complex(real, imaginary);

cout << complex << endl;

return 0;
}

Once you got that working in both environments start studying
overloading operators, and start adding addition, subtraction,
etcetera.

Good luck.

Nov 22 '05 #4

P: n/a
"Rock" <ra*****@aol.com> wrote in message
news:11**********************@g14g2000cwa.googlegr oups.com...
I'm in the process of writing this program for complex numbers and I
use DevC++. My professor on the other hand compiles on Borland 5.5. So
I ocasionally save and run my work on Borland to see if it caught
anything, it's very picky... Anyway, the code below works on Dev, and
it compiles fine on Borland, but when I run it from borland, there is
no output, no error, it just skips right over the freind ostream call.
HELP! I'm new to this and so far it's been a very trying experience...
any help would be greatly appreciated. Rick
....
//Class for complex numbers.
class Complex
{
public: ....
friend ostream& operator <<(ostream& outs, const Complex&
number);
.... };
int main()
{ .... Complex start(answer1, answer2);
cout << "\n" << start; ....
}
....
ostream& operator <<(ostream& outs, const Complex& number)
{

outs << "\n" << "Numbers started with: " << number.l_real <<
number.l_sign
<< abs(number.l_imaginary) << "i" << " and " << number.r_real
<< number.r_sign
<< abs(number.r_imaginary) << "i" << "." << "\n" << "\n" <<
"Added they equal: "
<< number.real_result1 << "+" << number.imaginary_result1 <<
"i" << endl
<< "Subtracted they equal: " << number.real_result2 << "+" <<
number.real_result2
<< "i" << endl << "Multiplied they equal: " <<
number.real_result3 << "+"
<< number.imaginary_result3 << "i" << endl << "They are " <<
number.answer << "."
<< "\n" << endl;

return outs;
}


It seems to me that the line:
cout << "\n" << start;
is simply not seeing the overloaded << operator. Why this would be, I'm not
enough of a C++ guru to figure out. One thing I would try would be tomove
the overloaded << definition above main just for the heck of it to see if
that did anything, because you are using the overload before it is defined
publicly. Not sure if that would do anything, but I would try it anyway.
Nov 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.