2017-05-21 24 views
0

が、私はこのメッセージに係る助けを必要とする:C++のコンパイルエラー(符号付きおよび符号なし整数式との比較)

char_cards.cpp: '無効CHARACTER :: Cards_pullout()' メンバ関数で: char_cards.cpp :88:警告:符号付きと符号なしの比較 整数式

このエラーの意味を説明できますか?私は問題がDWORDであると思うが、何が間違っているのか分からない。

これは関数である:-1に符号なし整数を初期化

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

行88が 'if'文と比較式を持つ行であると仮定すると、' DWODRD'は* unsigned *型であることに注意してください。 unsigned型とsinged型の比較はうまくいきません(符号なし型は決して負の値を持つことができないため)。 –

+0

だから私は(空白スペース== 0)かどうかを確認しますか? –

答えて

1

は明確に定義され、その最大値に符号なし整数を設定しています。 -1を使用してエラー状態を表すことはOKです。警告を取り除くには、いくつかのオプションがあります。

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()) { ... 
関連する問題