0

我有一类复数,+, -, *, /,=,!=在两种方式上都加载了复数和双精度类型的运算符,但是当我编写代码complex z = 1时,编译器给我一个错误,说没有从intto的变量转换complex。虽然,它接受代码

complex z;
z = 1;

一切正常。我该如何解决这个错误?

4

4 回答 4

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;

这是需要赋值运算符的赋值(到以前默认构造的对象)。

于 2013-03-22T17:17:24.400 回答
1

您可能需要添加一个接受 a 的构造函数double

class complex
{
public:
    complex(double d) : _real(d), _imag(0) { }
    ...
};

但是要小心:这可能会在任何预期的int地方传递 a complex,因为您的构造函数将执行隐式转换。

于 2013-03-22T17:15:16.320 回答
0

您需要一个带有double.

class complex
{
public:
    complex( double d );
};
于 2013-03-22T17:15:16.927 回答
0

您需要编写一个适当的构造函数。

class complex {
public:
    complex(double x) {
        // ...
    }

    // ...
};
于 2013-03-22T17:15:07.870 回答