Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

I am working on an assignment for my c++ class where I am doing operator overloading. I have everything working but the = operator, I am not sure how to make it work. I need to be able to do something like Complex myNumber = 4.4 5.5 and have it store that. I have attached my code below.

I am being told too many identifiers on my = code... can you see aproblem?

#include <iostream>

using std::cout;

#include"complex1.h"// Complex class definition

// constructor

Complex::Complex( double realPart, double imaginaryPart )

: real( realPart ),

imaginary( imaginaryPart )

{

// empty body

} // end Complex constructor

// addition operator

Complex Complex::operator+( const Complex &operand2 ) const

{

return Complex( real + operand2.real,

imaginary + operand2.imaginary );

} // end function operator+

// subtraction operator

Complex Complex::operator-( const Complex &operand2 ) const

{

return Complex( real - operand2.real,

imaginary - operand2.imaginary );

} // end function operator-

// I used the algorhthym posted in our conference. I had something similar but my parens were off I think :)

Complex Complex::operator*( const Complex &operand2 ) const

{

return Complex( ((real * operand2.real)-(imaginary * operand2.imaginary)), ((real * operand2.imaginary)+(operand2.real * imaginary)) );

} // end function operator*

Complex Complex::operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber ) const

{

complexNumber.getReal(realPar);

complexNumber.getImaginary(imaginaryPart);

return complexNumber

}

std::ostream& operator<<(std::ostream& stream,const Complex& complexNumber)

{

stream << "(" << complexNumber.getReal() << " , " << complexNumber.getImaginary()<<")" << std::endl;

return stream;

}

std::istream& operator>>(std::istream& stream,Complex& value)

{

double realPart, imaginaryPart;

stream >> realPart >> imaginaryPart;

value.getReal(realPart);

value.getImaginary(imaginaryPart);

return stream;

}

bool Complex::operator==( const Complex &operand2 ) const

{

if (real == operand2.real && imaginary == operand2.imaginary)

return true;

else

return false;

}

bool Complex::operator!=( const Complex &operand2 ) const

{

if (real != operand2.real || imaginary != operand2.imaginary)

return true;

else

return false;

}

-------------------------------

#ifndef COMPLEX1_H

#define COMPLEX1_H

class Complex {

public:

Complex( double = 0.0, double = 0.0 ); // constructor

Complex operator+( const Complex & ) const; // addition

Complex operator-( const Complex & ) const; // subtraction

Complex operator*( const Complex &operand2 ) const; // Multiplication

Complex operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber );

bool operator==( const Complex &operand2 ) const;

bool operator!=( const Complex &operand2 ) const;

friend std::ostream &operator<<(std::ostream &stream, const Complex &value);

friend std::istream &operator>>(std::istream &stream, Complex &value);

//accessor functions

double getReal() const { return real; }

double getImaginary() const { return imaginary; }

void getReal(double r) { real = r; }

void getImaginary(double i) { imaginary = i; }

private:

double real; // real part

double imaginary; // imaginary part

}; // end class Complex

#endif

I am being told too many identifiers on my = code... can you see aproblem?

#include <iostream>

using std::cout;

#include"complex1.h"// Complex class definition

// constructor

Complex::Complex( double realPart, double imaginaryPart )

: real( realPart ),

imaginary( imaginaryPart )

{

// empty body

} // end Complex constructor

// addition operator

Complex Complex::operator+( const Complex &operand2 ) const

{

return Complex( real + operand2.real,

imaginary + operand2.imaginary );

} // end function operator+

// subtraction operator

Complex Complex::operator-( const Complex &operand2 ) const

{

return Complex( real - operand2.real,

imaginary - operand2.imaginary );

} // end function operator-

// I used the algorhthym posted in our conference. I had something similar but my parens were off I think :)

Complex Complex::operator*( const Complex &operand2 ) const

{

return Complex( ((real * operand2.real)-(imaginary * operand2.imaginary)), ((real * operand2.imaginary)+(opera

} // end function operator*

Complex Complex::operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber ) const

{

complexNumber.getReal(real

complexNumber.getImaginary

return complexNumber

}

std::ostream& operator<<(std::ostream& stream,const Complex& complexNumber)

{

stream << "(" << complexNumber.getReal() << " , " << complexNumber.getImaginary

return stream;

}

std::istream& operator>>(std::istream& stream,Complex& value)

{

double realPart, imaginaryPart;

stream >> realPart >> imaginaryPart;

value.getReal(realPart);

value.getImaginary(imagina

return stream;

}

bool Complex::operator==( const Complex &operand2 ) const

{

if (real == operand2.real && imaginary == operand2.imaginary)

return true;

else

return false;

}

bool Complex::operator!=( const Complex &operand2 ) const

{

if (real != operand2.real || imaginary != operand2.imaginary)

return true;

else

return false;

}

--------------------------

#ifndef COMPLEX1_H

#define COMPLEX1_H

class Complex {

public:

Complex( double = 0.0, double = 0.0 ); // constructor

Complex operator+( const Complex & ) const; // addition

Complex operator-( const Complex & ) const; // subtraction

Complex operator*( const Complex &operand2 ) const; // Multiplication

Complex operator=( const double realPart, const double imaginaryParft, const Complex& complexNumber );

bool operator==( const Complex &operand2 ) const;

bool operator!=( const Complex &operand2 ) const;

friend std::ostream &operator<<(std::ostream &stream, const Complex &value);

friend std::istream &operator>>(std::istream &stream, Complex &value);

//accessor functions

double getReal() const { return real; }

double getImaginary() const { return imaginary; }

void getReal(double r) { real = r; }

void getImaginary(double i) { imaginary = i; }

private:

double real; // real part

double imaginary; // imaginary part

}; // end class Complex

#endif

You cannot do this. You can assign only one value (whatever type is it)

As a general rule, when you overload an operator you cannot modify the way it is used (precedence, association, etc).

like Complex number1, number2;

number1=number2?

Is that possible?

I cannot provide a direct answer for your question because it is a homework, but you can learn from this similar example and adapt to your needs:

http://www.fredosaurus.com/notes-cpp/oop-overloading/overloadassign.html

complex1.cpp(48) : error C2440: '=' : cannot convert from 'const double *__w64 ' to 'double'

1> There is no context in which this conversion is possible

complex1.cpp(49) : error C2440: '=' : cannot convert from 'const double *__w64 ' to 'double'

1> There is no context in which this conversion is possible

Complex Complex::operator=(const Complex& operand2 )

{

if (this != &operand2)

{

real = &operand2.real;

imaginary=&operand2.imagin

}

return *this;

}

New Header file after change

#ifndef COMPLEX1_H

#define COMPLEX1_H

class Complex {

public:

Complex( double = 0.0, double = 0.0 ); // constructor

Complex operator+( const Complex & ) const; // addition

Complex operator-( const Complex & ) const; // subtraction

Complex operator*( const Complex &operand2 ) const; // Multiplication

Complex operator=( const Complex& operand2 );

bool operator==( const Complex &operand2 ) const;

bool operator!=( const Complex &operand2 ) const;

friend std::ostream &operator<<(std::ostream &stream, const Complex &value);

friend std::istream &operator>>(std::istream &stream, Complex &value);

//accessor functions

double getReal() const { return real; }

double getImaginary() const { return imaginary; }

void getReal(double r) { real = r; }

void getImaginary(double i) { imaginary = i; }

private:

double real; // real part

double imaginary; // imaginary part

}; // end class Complex

#endif

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.

Complex Complex::operator=(const Complex& operand2 )

{

if (this != &operand2)

{

real = operand2.real; // removed ampersand

imaginary = operand2.imaginary; // removed ampersand

}

return *this;

}