Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;有符号/无符号不匹配_C++ - Fatal编程技术网

C++ C++;有符号/无符号不匹配

C++ C++;有符号/无符号不匹配,c++,C++,我在正确编译一些代码时遇到困难。以下是我的错误: 警告C4018:“>=”:有符号/无符号不匹配 void Player::HasteCap() { if (sWorld->getBoolConfig(CONFIG_PLAYER_HASTECAP_ENABLE)) return; bool hasInstantHasteCap = (GetFloatValue(UNIT_FIELD_BASEATTACKTIME + 0) == 1

我在正确编译一些代码时遇到困难。以下是我的错误:

警告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);
    }
}
void播放器::HasteCap()
{
如果(sWorld->getBoolConfig(配置\u播放器\u HASTECAP\u启用))
返回;
bool hasInstantHasteCap=(GetFloatValue(单位\字段\基本攻击时间+0)=1
||GetFloatValue(单位\字段\基本攻击时间+1)==1
||GetFloatValue(单位\字段\基本攻击时间+2)==1
||GetFloatValue(单位为模铸速度)==0);
如果(m_baseRatingValue[CR_HASTE_近战]>sWorld->getIntConfig(配置玩家\u HASTECAP\u限制))
{
SetFloatValue(单位为模铸速度,0);
SetFloatValue(单位\字段\基本攻击时间+基本攻击,1);
SetFloatValue(单位\字段\基本攻击时间+关闭\攻击,1);
设置浮点值(单位\字段\基本攻击时间+远程\攻击,1);
}
否则如果(hasInstantHasteCap&m_baseRatingValue[CR_HASTE_近战]getIntConfig(配置玩家\u HASTECAP\u限制))
{
设置浮动值(单位为1.0f,模式为1.0f);
SetRegularAttackTime();
ApplyCastTimePercentMod(m_baseRatingValue[CR_HASTE_拼写]*Getrating乘数(CR_HASTE_拼写),true);
if(GetShapeshiftForm())
{
SpellShapeshiftEntry常量*sEntry=sSpellShapeshiftStore.LookupEntry(GetShapeshiftForm());
如果(进入和进入->攻击速度)
{
设置攻击时间(基本攻击,进入->攻击速度);
设置攻击时间(关闭攻击,进入->攻击速度);
设置攻击时间(远程攻击、基本攻击时间);
}
}
}
if(CanModifyStats())
{
更新的物理图像(基本攻击);
更新的magephysical(OFF_攻击);
更新的物理图像(远程攻击);
}
}

您发布的代码没有包含相关成员/函数的定义,但编译器可能是正确的

你期望得到什么样的答案


修复该问题(更改成员/函数/执行C样式转换/执行静态转换等,以使比较双方的“签名”匹配),或使用合适的#pragma禁用此警告这些是警告而不是错误。通常,尽管有警告,代码仍应编译。但是,如果指定“将警告视为错误”编译器选项,则如果编译器生成任何警告(或错误),则不会编译


要解决该警告,可以将逻辑运算符的一个无符号端强制转换为int。

要比较的两个值的有符号/无符号性质应该相同,否则一个值将被强制转换为另一个值进行比较,这可能会导致意外的结果

最好确保您所比较的是同一类型,但:

如果您知道哪个值可以安全地强制转换,请显式地强制转换该值。在您的案例中,将有符号值转换为无符号值

e、 g


道歉的副本,我正在学习C++,理解问题(未赋值int),但是真的不知道如何在这个例子中修复它。未签名的int不被分配,问题不是你问问题,问题是你没有检查,如果它被回答“安全”的意思是<代码> Val2 < /C> >=0。谢谢,这帮了大忙。向所有人道歉,这之前已经发布过,但我只是在理解int的签名时遇到了麻烦。我认为您没有分享足够的代码让我们告诉您。什么是:sWorld->getIntConfig(CONFIG\u PLAYER\u HASTECAP\u LIMIT)的返回类型,什么类型是:m\u baseRatingValue[CR\u HASTE\u MELEE]这不是顺序,但大部分是这样的:CR\u HASTE\u MELEE是一个枚举,sWorld会写入一个配置文件,其中可以给出一个值来修改玩家的攻击速度。好的,我不认为你在pastebin上发布的内容真的有我要的信息,所以我猜。我相信sWorld的getIntConfig函数返回一个int(有符号),m_baseRatingValue是一个无符号类型。它们应该是相同的类型(看看它们的声明,我在你的帖子中没有看到)。
unsigned int val1 = someunsignedvalue;  
int val2 = somesignedvalue;    
if (val1 > (unsigned int) val2) {
    /* do stuff */  
}