vs2003不支持auto,可以用什么来代替修改呢
本帖最后由 dmxayjn 于 2020-7-8 23:10 编辑void CDbManager::SendDisguiseUserTime( CQuery* pQuery, LPDB_OVERLAPPED_PLUS lpDbOverlappedPlus )
{
char szExec;
sprintf(szExec, "uspGetTempDisguiseTimeInfo");
if (pQuery->Exec(szExec))
{
int cb = 0;
std::list<std::pair<DWORD, //playerID
DWORD> > info;
while (pQuery->Fetch())
{
info.push_back(std::make_pair(pQuery->GetInt("playerID"), pQuery->GetInt64("time")));
}
BEFORESENDDUAL( ar, PACKETTYPE_QUERY_DISGUISE_INFO, DPID_UNKNOWN, DPID_UNKNOWN );
ar << info.size();
for(auto iter = info.begin(); iter != info.end(); ++iter) //这里报错error C2440: “初始化” : 无法从“std::list<_Ty>::iterator”转换为“int” with [ _Ty=std::pair ] 没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
{ //error C2678: 二进制“!=” : 没有找到接受“int”类型的左操作数的运算符(或没有可接受的转换)
ar << iter->first; // error C2227: “->first”的左侧必须指向类/结构/联合 类型是“int”
ar << iter->second; // error C2227: “->second”的左侧必须指向类/结构/联合
}
SEND( ar, CDPTrans::GetInstance(), DPID_ALLPLAYERS );
}
if(lpDbOverlappedPlus)
FreeRequest( lpDbOverlappedPlus );
}
这个代码是我从vs2010项目上复制的,我想移植到 vs2003项目里,
现在发现 vs2003 不支持 auto, auto 需要改成什么类型。
auto iter = info.begin()
这东西就是个迭代器的指针,你可以看看info是什么类型的 然后 替换就行了 云在天 发表于 2020-7-8 22:40
这东西就是个迭代器的指针,你可以看看info是什么类型的 然后 替换就行了
感谢回复,已经请教了大神已经解决了,我把修改好的代码也发上来,让更多人都知道。 已经解决了,已经修改的代码如下:
std::list<std::pair<DWORD, //playerID
DWORD> > info;
while (pQuery->Fetch())
{
info.push_back(std::make_pair(pQuery->GetInt("playerID"), pQuery->GetInt64("time")));
}
BEFORESENDDUAL( ar, PACKETTYPE_QUERY_DISGUISE_INFO, DPID_UNKNOWN, DPID_UNKNOWN );
ar << info.size();
for(std::list<std::pair<DWORD,DWORD> >::iterator iter = info.begin(); iter != info.end(); ++iter)
{
ar << iter->first;
ar << iter->second;
} 本帖最后由 我的爱是你 于 2020-7-8 22:49 编辑
解决了就行 我的爱是你 发表于 2020-7-8 22:47
for( std::list::iterator iter =info.begin(); iter != info.end(); ++iter)
既然知道list 容器储存一 ...
嗯,还是要感谢回答,已经解决,方法一样。
页:
[1]