Problem do not seems to be with the double conversion.
even a = 3.0; do not succeed.
As you pointed out problem is with the operator= definition.
it compiles and execute perfectly.
error message generated by the Visual C++ compiler is misleading. it
gives the error...
It seems solaris compiler is better than Visual C++ compiler. it gives
the exact error message.
complex&)";.
Dhirendra Singh <dhirendraks@gmail.com> wrote:
Hi,
The following C++ program is not compiling on my system.
#include <iostream>
using namespace std;
class complex {
It may not affect you here since you do not #include <complex>, but
beware of the possibility of the combination of your own class called
"complex" combined with the "using namespace std;".
double re, im;
public:
complex( ) :re(0), im(0) {}
complex( double r ) :re(r), im(0) {}
complex( double r, double i) :re(r), im(i) {}
complex& operator=( complex& );
};
complex& complex::operator=( complex& b )
{
re = b.re;
im = b.im;
return *this;
}
int main()
{
complex a ;
a = 3; // Gives compilation error. Not able to convert from scalar
3 to complex(3).
Right, you have no operator=() that takes an int. You have a
constructor that takes a double, but your assignment you have would
require a conversion from int to double, then from double to complex
(via the constructor). Since it requires two conversions, the compiler
complains. However, if you do
complex a = 3; // initialization, not assignment
then this only requires one conversion, and works.
a = complex(3); // this is perfectly ok.
Right. Looking back though, your operator=(complex&) should probably be
operator=(const complex&).
return 0;
}
I am using visual C++ compiler.
I am not able to figure out if there is something wrong with the
concept or compiler is stupid ?
--
Marcus Kwok
Replace 'invalid' with 'net' to reply