【发布时间】:2021-07-08 14:12:25
【问题描述】:
我试图在最小值和最大值之间获得一个随机数,但我得到一个缩小的转换错误。我已经检查了 uniform_int_distribution 的模板参数,所以使用 short 应该不是问题。
模板参数
IntType - 生成器生成的结果类型。如果这不是 short、int、long、long long、 之一,则效果未定义unsigned short、unsigned int、unsigned long 或 unsigned long long。
在我试图解决这个问题时,我将这些值转换为一个似乎无法解决问题的短值。 当 2 个整数值被赋予 randX 和 randY 时,错误消失了。
还原对它所做的更改后我当前的代码:
Fruit Fruit::getRandomFruit(const short& maxPosX, const short& maxPosY)
{
bool isEaten{0};
std::uniform_int_distribution<short> randX{ 1, maxPosX-1 };
std::uniform_int_distribution<short> randY{ 1, maxPosY-1 };
COORD frPos{randX(mersenne), randY(mersenne)};
return {isEaten,
frPos
};
}
错误信息:
Element '2': conversion from 'int' to '_Ty' requires a narrowing conversion
据我了解,编译器将这些值视为整数并尝试对其进行转换。
【问题讨论】:
标签: c++ random compiler-errors c++17 console-application