首页 > 解决方案 > IntRect SFML 声明

问题描述

我正在处理一个项目,SFML我想使用std::pair. 在我的.hpp我有这个属性。 sf::IntRect _size;用于设置width, height, x, y矩形的。在我的.cpp文件中,我已经这样做了。

void Character::setCharacter(const std::string& texture_p, std::pair<float, float> rec, std::pair<float, float> recc)
{
    _size = {rec.first,rec.second,recc.first,recc.second};

    如果 (!_texture->loadFromFile(texture_p))
        抛出 CharacterError(ERR_TEXTURE, __FILE__, __LINE__);
    _sprite->setTexture(*_texture);
    _sprite->setTextureRect(_size);
}

但是在编译过程中,我有这个错误,我不知道它的含义。

Element '1': conversion from '_Ty1' requires a narrowing conversion
Element '2': conversion from '_Ty2' requires a narrowing conversion
Element '3': conversion from '_Ty1' requires a narrowing conversion
Element '4': conversion from '_Ty2' requires a narrowing conversion

标签: c++sfml

解决方案


该错误意味着您正在从 float 隐式转换为 int,这可能会导致精度损失。

将元素从 float 显式转换为 int:

_size = {
    static_cast<int>(rec.first),
    static_cast<int>(rec.second),
    static_cast<int>(recc.first),
    static_cast<int>(recc.second)
};

或者改变recrecc成为std::pair<int, int>第一位。


推荐阅读