我有一个复数类,我正在尝试实现一个函数来计算模数(这需要使用 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
orint
值。
我说 sqrt 只会采用浮动值是对的吗?如果是这样,我如何在没有“数据丢失”警告的情况下强制 im 和 re 到浮点数。我可以在不转换它们的情况下做到这一点吗?