模板类中的转换错误

时间:2012-04-02 11:47:12

标签: c++ class templates

我的模板类中的某个函数出现问题。

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

template <class T>

T complex<T>::returnMod()

我收到错误:'警告C4244:'=':从'double'转换为'int',可能会丢失粗线的数据'。如何告诉编译器使用为每个类对象调用的类型?我创建了两种不同类型的复数,一些是int,一些是double。谢谢。

2 个答案:

答案 0 :(得分:3)

问题似乎是您正在使用类型complex实例化int,并且编译器正在按照您的要求执行操作。 T为int,表达式sqrt返回double,因此必须进行转换。

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

答案 1 :(得分:1)

使用演员:

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