C++有符号/无符号不匹配
我无法正确编译某些代码。这里是我的错误:C++有符号/无符号不匹配
警告C4018:“> =”:符号/无符号不匹配
void Player::HasteCap() {
if (sWorld->getBoolConfig(CONFIG_PLAYER_HASTECAP_ENABLE))
return;
bool hasInstantHasteCap = (GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 0) == 1
|| GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 1) == 1
|| GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 2) == 1
|| GetFloatValue(UNIT_MOD_CAST_SPEED) == 0);
if (m_baseRatingValue[CR_HASTE_MELEE] > sWorld->getIntConfig(CONFIG_PLAYER_HASTECAP_LIMIT))
{
SetFloatValue(UNIT_MOD_CAST_SPEED, 0);
SetFloatValue(UNIT_FIELD_BASEATTACKTIME + BASE_ATTACK, 1);
SetFloatValue(UNIT_FIELD_BASEATTACKTIME + OFF_ATTACK, 1);
SetFloatValue(UNIT_FIELD_BASEATTACKTIME + RANGED_ATTACK, 1);
}
else if (hasInstantHasteCap && m_baseRatingValue[CR_HASTE_MELEE] < sWorld->getIntConfig(CONFIG_PLAYER_HASTECAP_LIMIT))
{
SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f);
SetRegularAttackTime();
ApplyCastTimePercentMod(m_baseRatingValue[CR_HASTE_SPELL] * GetRatingMultiplier(CR_HASTE_SPELL), true);
if (GetShapeshiftForm())
{
SpellShapeshiftEntry const* ssEntry = sSpellShapeshiftStore.LookupEntry(GetShapeshiftForm());
if (ssEntry && ssEntry->attackSpeed)
{
SetAttackTime(BASE_ATTACK, ssEntry->attackSpeed);
SetAttackTime(OFF_ATTACK, ssEntry->attackSpeed);
SetAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME);
}
}
}
if (CanModifyStats())
{
UpdateDamagePhysical(BASE_ATTACK);
UpdateDamagePhysical(OFF_ATTACK);
UpdateDamagePhysical(RANGED_ATTACK);
}
}
回答:
您发布不包含有问题的成员/函数的定义代码,但是编译器可能是正确。
你期望什么样的答案?
要么修复问题(更改成员/功能/做一个C风格演员/做一个static_cast < ...>等等,以便比较两边的“签名”),或者禁用此警告合适#pragma
回答:
这些警告不是错误。通常,尽管有警告,代码仍应编译。但是,如果您指定“将警告视为错误”编译器选项,则编译器将不会编译它,如果它产生任何警告(或错误)。
要解决该警告,可以将逻辑运算符的一个无符号边转换为int形式。
回答:
您正在比较的两个值的有符号/无符号性质应该是相同的,否则一个会作为另一个进行比较以进行比较,这可能会导致意外的结果。
这将是最好确保你要比较的类型相同,但:
如果您知道哪个值是安全的施展,显式转换的那一个。在你的情况下,将有符号值作为无符号值。
例如
unsigned int val1 = someunsignedvalue; int val2 = somesignedvalue;
if (val1 > (unsigned int) val2) {
/* do stuff */
}
以上是 C++有符号/无符号不匹配 的全部内容, 来源链接: utcz.com/qa/257779.html