【问题标题】:Conversion error in template class模板类中的转换错误
【发布时间】:2012-04-02 11:47:12
【问题描述】:

我的模板类中的一个函数有问题。

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

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

【问题讨论】:

    标签: c++ class templates


    【解决方案1】:

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

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

    【讨论】:

    • 这是有道理的,当我尝试让函数返回一个 int 类型时,我没有想到 sqrt 返回一个 double。谢谢。
    【解决方案2】:

    使用强制转换:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 1970-01-01
      • 2016-10-21
      • 2012-10-11
      • 1970-01-01
      相关资源
      最近更新 更多