从'double'转换为'int'需要缩小转换范围
conversion from 'double' to 'int' requires a narrowing conversion
嗨,我是一个C 初学者,我真的无法解决这个错误从"双"转换为" 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:从"双"转换为" int"需要缩小转换
该错误是由您在第二个Segment
构造函数中将double
转换为int
引起的。从代码的上下文中,我认为the_end
定义为int
,但您将其分配为double
。
Segment::Segment(double new_end, double new_acceleration)
: the_end{ new_end }, // <-- Here
acceleration{ new_acceleration }
{
}
特别是您对初始化列表的使用导致错误,因为它们不允许缩小。
您情况的特别注释:
- 浮点值不能转换为整数类型。
要解决错误,只需提供明确的铸件:
Segment::Segment(double new_end, double new_acceleration)
: the_end{ static_cast<int>(new_end) },
acceleration{ new_acceleration }
{
}
确实要注意从int
到double
的潜在危险(整数截断,从8个字节到4个字节的数据丢失,等等)。
相关文章:
- 奇怪的缩小转换在 g++ 编译器中加倍到浮点警告
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- std::map, std::unordered_map - 缩小初始值设定项列表中的转换范围
- 为什么显式构造被视为(隐式)缩小转换?
- 为什么C++在将浮点数转换为字符时没有显示缩小转换错误?
- 缩小从double到float的转换
- 为什么 gcc 警告只针对统一初始化缩小转换范围?
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 缩小从字符到双倍的转换
- gcc在 运算符中缩小转换
- 从'::size_t'转换为'int'需要缩小转换范围
- 列表初始化时需要缩小转换范围
- 缩小从"int"(常量表达式)到"无符号int"的转换 - MSVC vs gc
- 从'double'转换为'int'需要缩小转换范围
- 从“ int”到'int16_t {aka short int}'内部{}的“((int)a) -1)”的缩小转换
- 正在缩小MSVC中到布尔警告的转换范围
- 当float转换为int时,此代码中是如何/为什么进行缩小的
- 将转换范围缩小到更大的类型(然后再回来)
- 为什么缩小转换范围不能防止错误类型的map.insert()失败