我的模板类中的某个函数出现问题。
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。谢谢。
答案 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
。