C ++编译错误(有符号和无符号整数表达式之间的比较)

时间:2017-05-21 13:22:27

标签: c++

我需要有关此消息的帮助:

  

char_cards.cpp:在成员函数' void CHARACTER :: Cards_pullout()':   char_cards.cpp:88:警告:有符号和无符号之间的比较   整数表达式

可以解释这个错误的含义吗?我认为问题出在DWORD上,但我不知道出了什么问题。

这是功能:

DWORD CHARACTER::GetEmptySpaceInHand()
{
    for (int i=0; i<MAX_CARDS_IN_HAND; ++i)
    {
        if (character_cards.cards_in_hand[i].type == 0)
            return i;
    }
    return -1;
}
void CHARACTER::Cards_pullout()
{
    DWORD empty_space = GetEmptySpaceInHand(); 
    if (empty_space == -1) // Here is the error.
    {
        #ifdef __MULTI_LANGUAGE_SYSTEM__
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT(GET_LANGUAGE(this), "You don't have space in hands."));
        #else
        ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You don't have space in hands."));
        #endif
        return;
    }
    RandomizeCards();
    SendUpdatedInformations();
}

1 个答案:

答案 0 :(得分:1)

将无符号整数初始化为-1已明确定义,并将无符号整数设置为其最大值。因此使用-1表示错误条件是可以的。要摆脱警告,你几乎没有选择:

1)使用static_cast。这表明您了解转换并且是故意的:

if empty_space == static_cast<DWORD>(-1)) { ...

2)使用std::numeric_limits<DWORD>::max()代替-1。这需要包含limits标题。

if (empty_space == std::numeric_limits<DWORD>::max()) { ...