转换为' double'到' int'需要缩小转换

时间:2017-02-27 16:49:09

标签: c++

嗨,我是一名c ++初学者,我真的无法理解这个错误 转换为' double'到' int'需要缩小转换 这是我的代码;     #include" Segment.h"      使用命名空间imat1206;

Segment::Segment(int new_speed_limit
, int new_end, double new_length, double new_deceleration)
:the_speed_limit{ new_speed_limit }
, the_end{ new_end }
, the_length{ new_length }
, deceleration{ new_deceleration }


{}

Segment::Segment(double new_end, double new_acceleration)
    :the_end{ new_end }
    , acceleration{ new_acceleration }

{} error here 
double Segment::to_real() const {
return static_cast<double>((the_end)*(the_end) / (2 * (the_length)));
while (acceleration)
{
    (acceleration >= 0);
        return static_cast<double> ((the_end) /(1 * (acceleration)));
}
}

请有人帮助谢谢 我得到的错误是:错误C2397:转换为&#39; double&#39;到&#39; int&#39;需要缩小转换

1 个答案:

答案 0 :(得分:1)

The error是由您在第二个double构造函数中将int转换为Segment引起的。从代码的上下文中,我假设the_end被定义为int,但您为其分配double

Segment::Segment(double new_end, double new_acceleration)
  : the_end{ new_end },               // <-- Here
    acceleration{ new_acceleration }
{

}

您特别使用初始化程序列表会导致错误do not allow for narrowing

特别注意您的情况:

  • 无法将浮点值转换为整数类型。

要修复错误,只需提供一个显式的强制转换:

Segment::Segment(double new_end, double new_acceleration)
  : the_end{ static_cast<int>(new_end) },
    acceleration{ new_acceleration }
{

}

请注意从int转换为double的潜在危险(整数截断,数据可能从8字节丢失到4字节等)。