模板类中的转换错误

模板类中的转换错误

问题描述:

我在模板类中遇到了一个我的函数有问题。模板类中的转换错误

template <class T>
T complex<T>::returnMod()
{
T mod(0);
mod = sqrt(pow(re,2.0) + pow(im,2.0));
return mod;
}

我得到错误:'warning C4244:'=':从'double'转换为'int',可能会丢失数据',以粗体显示。我怎样才能告诉编译器使用为每个类对象调用的类型?我创建了两种不同类型的复数,其中一些是int,一些是double。谢谢。

这个问题似乎是,你正在实例化complex与类型int,编译器正在做你所要求的。 T是int,而表达式sqrt返回double,因此它必须进行转换。

我不确定你的意思是什么如何告诉编译器使用为每个类对象调用的类型?,但这是预期的行为。

+0

这很有道理,当我尝试使函数返回一个int类型时,我没有想到sqrt会返回一个double。谢谢。 – oxidising 2012-04-02 13:19:08

使用铸造:

mod = T(sqrt(pow(re,2.0) + pow(im,2.0))); 

但这种损失精度和轮错误(例如,它会sqrt(3)转换为1)。您可以解决第二个问题,但不是第一位:

mod = T(0.5 + sqrt(pow(re,2.0) + pow(im,2.0))); 

这将sqrt(3)转换为2