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

回到顶部