我有一类复数,在两种方式上都加载了复杂和双重类型的+, -, *, /,=,!=
运算符但是当我编写代码complex z = 1
时,编译器给出了一个错误,说明有没有从int
到complex
的变量转换。虽然,它接受代码
complex z;
z = 1;
一切正常。我该如何解决这个错误?
答案 0 :(得分:2)
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;
是赋值(对于先前默认的构造对象),需要赋值赋值运算符。
答案 1 :(得分:1)
您可能需要添加一个接受double
的构造函数:
class complex
{
public:
complex(double d) : _real(d), _imag(0) { }
...
};
但要小心:这将使得int
可能会在complex
的任何地方通过,因为您的构造函数将执行隐式转换。
答案 2 :(得分:0)
您需要编写适当的构造函数。
class complex {
public:
complex(double x) {
// ...
}
// ...
};
答案 3 :(得分:0)
您需要一个带double
。
class complex
{
public:
complex( double d );
};