Неверное сужающееся преобразование из "float" в "int"
Я использую графическую библиотеку SFML для C++. Мой компилятор - Visual Studio 2017.
Когда я делал функцию scale
Я столкнулся с проблемой. У меня была ошибка, говорящая:
Invalid narrowing conversion from "float" to "int"
Итак, я положил roundf
перед обоими элементами в векторе, но это, похоже, не помогло. Изменение std::vector<int>
в std::vector<float>
для возвращаемого значения, кажется, работает, но я хотел бы его как целое число. Есть идеи? Вот мой код:
std::vector<int> scale(sf::RenderWindow *Window, std::vector<int> offset)
{ // Scale objects
float scale = 500;
return { roundf(Window->getSize().x / scale * offset[0]), roundf(Window->getSize().y / scale * offset[1]) };
}
1 ответ
Решение
Ты хочешь lroundf()
преобразовать в long int
скорее, чем round()
который возвращает поплавок. Вам также может понадобиться разыграть результат lroundf()
в int
(потому что это обычно уже, чем long
).
Как это:
return { int(lroundf(Window->getSize().x / scale * offset[0])), int(lroundf(Window->getSize().y / scale * offset[1])) };