私は複素数のクラスを持っており、+, -, *, /,=,!=
両方の方法で複素数とdouble型の両方で演算子をロードしましたが、コードを書くと、コンパイラはからへcomplex z = 1
の変数変換がないというエラーを表示します。ただし、コードを受け入れますint
complex
complex z;
z = 1;
そして、すべてが正常に動作します。このエラーを修正するにはどうすればよいですか?
私は複素数のクラスを持っており、+, -, *, /,=,!=
両方の方法で複素数とdouble型の両方で演算子をロードしましたが、コードを書くと、コンパイラはからへcomplex z = 1
の変数変換がないというエラーを表示します。ただし、コードを受け入れますint
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;
これは、代入演算子を必要とする (以前にデフォルトで構築されたオブジェクトへの) 代入です。
を受け入れるコンストラクターを追加することができますdouble
:
class complex
{
public:
complex(double d) : _real(d), _imag(0) { }
...
};
ただし、注意してください。これにより、コンストラクターが暗黙の変換を実行するため、int
a が期待される場所にan が渡される可能性があります。complex
適切なコンストラクターを記述する必要があります。
class complex {
public:
complex(double x) {
// ...
}
// ...
};