我有一類複數,加載+, -, *, /,=,!=
操作符在兩種方式都有複雜和雙重類型,但是當我編寫代碼complex z = 1
時,編譯器給我一個錯誤,說沒有從int
到complex
的可變轉換。雖然,它接受代碼類型轉換爲自定義類 - C++
complex z;
z = 1;
和一切工作正常。我該如何解決這個錯誤?
我有一類複數,加載+, -, *, /,=,!=
操作符在兩種方式都有複雜和雙重類型,但是當我編寫代碼complex z = 1
時,編譯器給我一個錯誤,說沒有從int
到complex
的可變轉換。雖然,它接受代碼類型轉換爲自定義類 - C++
complex z;
z = 1;
和一切工作正常。我該如何解決這個錯誤?
你需要寫一個合適的構造函數。
class complex {
public:
complex(double x) {
// ...
}
// ...
};
您可能需要添加一個構造函數,接受double
:
class complex
{
public:
complex(double d) : _real(d), _imag(0) { }
...
};
要小心,雖然:這將使其有可能通過一項int
只要一complex
預期,因爲你的構造將執行隱式轉換。
您需要一個構造函數,它需要一個double
。
class complex
{
public:
complex(double d);
};
線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;
這是分配(到以前默認構造的對象),需要一個賦值操作符不同。