消除与浮点C+的int32_t转换相关的警告消息+; 我已经掌握了一些C++游戏资源,我对C++很陌生,我已经成功编译了这些源码,而且看起来很好,但是有一些恼人的警告我无法解决。 我的C++编程技巧非常基础,这些模板变量TyGyS有很大的问题。尤其是这个名为int32_t的模块化模板,在我的源代码中几乎到处都使用它

消除与浮点C+的int32_t转换相关的警告消息+; 我已经掌握了一些C++游戏资源,我对C++很陌生,我已经成功编译了这些源码,而且看起来很好,但是有一些恼人的警告我无法解决。 我的C++编程技巧非常基础,这些模板变量TyGyS有很大的问题。尤其是这个名为int32_t的模块化模板,在我的源代码中几乎到处都使用它,c++,compilation,C++,Compilation,我在int32上读到的文档并不十分友好,它们非常正式,对于那些不知道如何使用它的人来说很难理解。(嗯,我觉得我可能看错地方了) 切中要害: 以下是我遇到问题的函数: int32_t Weapons::getMaxMeleeWeaponDamage(int32_t attackSkill, int32_t attackValue, float attackFactor) { return ((int32_t)std::ceil(((attackValue * 0.05) * attackS

我在int32上读到的文档并不十分友好,它们非常正式,对于那些不知道如何使用它的人来说很难理解。(嗯,我觉得我可能看错地方了)

切中要害:

以下是我遇到问题的函数:

int32_t Weapons::getMaxMeleeWeaponDamage(int32_t attackSkill, int32_t attackValue, float attackFactor)
{
    return ((int32_t)std::ceil(((attackValue * 0.05) * attackSkill) + (attackValue)) / attackFactor);
}
给出的警告:

170 C:\compiling\GameSources\wearms.cpp[警告]从float'转换为
int32\t'

线索是,我确实希望它在计算时考虑float,并返回一个int值。 (因此伤害计算是准确的,但游戏客户端上显示的伤害会返回伤害的整数表示)


就我所知,这个警告只是告诉我我想听的。但是我怎样才能摆脱这个警告呢?(除了告诉我的编译器忽略警告之外,我不希望这样)

您正在将ceil的返回值转换为int。然后将该结果除以浮点。现在,返回的值是一个浮点数。然后,编译器必须将其转换为int。这是编译器抱怨的后一种转换

我想说你把铅字铸造放错地方了


作为风格问题,我建议你使用C++的铸造而不是旧的C型铸造。

警告只让你知道你可能做了错事,如果你知道你做的一切正确,那么你可以沉默警告。类似的讨论如下: