我正在学习C ++,但是当我想运行我的代码时,我遇到了一些问题......
int __cdecl Voter___Vote(Voter *_this, CPlayer *pOne, char *pdata){
CPlayer *pPlayer=(CPlayer *)pOne;
CPvpOrderView * Pvp=GetPvpOrderViewV(pPlayer);
char tmp1[255];
char tmp2[255];
char tmp3[255];
char tmp4[255];
itoa(pPlayer->m_Param.m_dbChar.m_byLevel,tmp1,10);
sprintf(tmp2, "%Lf", Pvp->m_dPvpPoint>=PvpPoint);
sprintf(tmp3, "%Lf", Pvp->m_dPvpPoint>=PvpCash);
itoa(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=TotalPlayMin,tmp4,10);
MessageBoxA(NULL,tmp2 ,tmp3,MB_OK);
if(pPlayer->m_Param.m_dbChar.m_byLevel>=Lvl&&Pvp->m_dPvpPoint>=PvpPoint&&Pvp->m_dPvpCash>=PvpCash&&
pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=TotalPlayMin)
{return p_Vote(_this,pOne,pdata);}
return 10;
}
我有一些像这样的错误
Vote.cpp
Vote.cpp(42): warning C4018: '>=' : signed/unsigned mismatch
Vote.cpp(45): warning C4018: '>=' : signed/unsigned mismatch
答案 0 :(得分:2)
比较签名/未签名是危险的。非常直观地你会发现小的负符号值比无符号值大:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = -11;
unsigned int b = 42;
if ( a < b ) {
printf("a<b\n");
}
else
{
printf("a>=b\n");
}
}
打印出来:
a>=b
答案 1 :(得分:0)
警告意味着您要比较的变量的签名是不同的。
要解决此问题,您可以将无符号变量强制转换为有符号的类型:
itoa(static_cast<signed>(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin)>=TotalPlayMin,tmp4,10);
我假设m_dw*
个变量是DWORD
&#39; s,这意味着它们是32位无符号整数。
您还可以将signed变量转换为无符号类型:
itoa(pOne->m_pUserDB->m_AvatorData.dbAvator.m_dwTotalPlayMin>=static_cast<unsigned>(TotalPlayMin),tmp4,10);
这样做也可以,但这取决于是否知道知道 TotalPlayMin
总是一个正数。
编辑:请注意,由于我无法在代码中看到行号,因此我确实没有找到正确的行,并且还有很多&gt; =比较。< / p>