我有一类复数,+, -, *, /,=,!=
在两种方式上都加载了复数和双精度类型的运算符,但是当我编写代码complex z = 1
时,编译器给我一个错误,说没有从int
to的变量转换complex
。虽然,它接受代码
complex z;
z = 1;
一切正常。我该如何解决这个错误?
我有一类复数,+, -, *, /,=,!=
在两种方式上都加载了复数和双精度类型的运算符,但是当我编写代码complex z = 1
时,编译器给我一个错误,说没有从int
to的变量转换complex
。虽然,它接受代码
complex z;
z = 1;
一切正常。我该如何解决这个错误?
该行complex z = 1
执行Copy Initialization。您将需要一个适当的构造函数:
complex::complex(int i) // or double or whatever is convertible to int by
{ // implicit conversion
// your code
}
这不同于
complex z;
z = 1;
这是需要赋值运算符的赋值(到以前默认构造的对象)。
您可能需要添加一个接受 a 的构造函数double
:
class complex
{
public:
complex(double d) : _real(d), _imag(0) { }
...
};
但是要小心:这可能会在任何预期的int
地方传递 a complex
,因为您的构造函数将执行隐式转换。
您需要一个带有double
.
class complex
{
public:
complex( double d );
};
您需要编写一个适当的构造函数。
class complex {
public:
complex(double x) {
// ...
}
// ...
};