モジュラスを計算する関数を実装しようとしている複素数クラスがあります(これにはsqrtを使用する必要があります)。
私のヘッダーファイルは次のとおりです。
#ifndef MY_CLASS_H
#define MY_CLASS_H
template <class T> class complex
{
// function to overload operator<< a friend
template <class T>
friend std::ostream& operator<< (std::ostream &os, const complex<T> &z);
private:
T re,im;
public:
// Constructors & destructor
complex(){re=im=0;}
complex( const T& r, const T& i ) : re(r), im(i) {}
~complex(){}
// Return real component
T realcomp() const {return re;}
// Return imaginary component
T imagcomp() const {return im;}
// Return modulus
double modulus() {return sqrt(im*im + re*re);}
etc....
コンパイラはエラーを出力します:
error C2668: 'sqrt' : ambiguous call to overloaded function
could be 'long double sqrt(long double)'
or 'float sqrt(float)'
or 'double sqrt(double)'
sqrt
私が知っていることは、それが通過しているデータのタイプを知る必要があることを私に伝えています。
私のプログラムでは、im
またはのいずれかの値re
を取ります。double
int
sqrtは浮動小数点値のみを取ると言っているのは正しいですか?もしそうなら、どうすれば「データの損失」の警告なしにimとreをフローティングポイントに強制できますか。それらを変換せずにこれを行うことはできますか?