0

私は複素数のクラスを持っており、+, -, *, /,=,!=両方の方法で複素数とdouble型の両方で演算子をロードしましたが、コードを書くと、コンパイラはからへcomplex z = 1の変数変換がないというエラーを表示します。ただし、コードを受け入れますintcomplex

complex z;
z = 1;

そして、すべてが正常に動作します。このエラーを修正するにはどうすればよいですか?

4

4 に答える 4

2

この行complex z = 1Copy 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

を受け入れるコンストラクターを追加することができますdouble:

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

ただし、注意してください。これにより、コンストラクターが暗黙の変換を実行するため、inta が期待される場所にan が渡される可能性があります。complex

于 2013-03-22T17:15:16.320 に答える
0

適切なコンストラクターを記述する必要があります。

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

    // ...
};
于 2013-03-22T17:15:07.870 に答える