Неверное сужающееся преобразование из "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])) };
Другие вопросы по тегам