C++编译错误(有符号和无符号整数表达式之间的比较)
C++ Compile Error (comparison between signed and unsigned integer expressions)
我需要有关此消息的帮助:
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
是明确定义的,并将无符号整数设置为其最大值。因此,使用 -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()) { ...
相关文章:
- 这 4 个 lambda 表达式之间有什么区别?
- 非类类型表达式的静态类型与动态类型之间的差异
- 使用正则表达式c++从单词和分隔符之间的字符串中提取所有子字符串
- 为什么C++中的表达式类型在不同版本之间会发生变化
- 使用折叠表达式打印每个元素之间的空格
- 折叠表达式和参数包:static_assert 内 Args&& 和 Args 之间的区别
- 正则表达式 获取两个换行符之间的文本
- 正则表达式匹配字符串之间的数字
- 正则表达式使用提升令牌迭代器在单引号和括号之间提取值
- lambda 表达式中引用捕获的 constexpr 变量和非显式捕获的 constexpr 变量之间的区别
- 符号和未签名整数表达式之间的比较,以进行循环误差
- C++编译错误(有符号和无符号整数表达式之间的比较)
- 是否可以找到两个模板参数之间表达式的类型
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- C++ 有符号和无符号整数表达式之间的比较
- 提升正则表达式 cpp 用于查找 %% 之间的字符串,输出不包括 % 字符本身
- 有符号和无符号整数表达式之间的比较
- 消除有符号和无符号整数表达式之间比较的优雅方式
- 两个指针之间的差异是合法的 c++17 常量表达式
- 在文件中找到最长的行,签名和未签名的整数表达式之间的比较