簡體   English   中英

C ++編譯錯誤(有符號和無符號整數表達式之間的比較)

[英]C++ Compile Error (comparison between signed and unsigned integer expressions)

我需要有關此消息的幫助:

char_cards.cpp:在成員函數'void CHARACTER :: Cards_pullout()'中:char_cards.cpp:88:警告:有符號和無符號整數表達式之間的比較

somone可以解釋此錯誤的含義嗎? 我認為問題出在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的定義很明確,並將無符號整數設置為其最大值。 因此,使用-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()) { ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM