dmxayjn 发表于 2020-7-8 22:24

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 需要改成什么类型。



云在天 发表于 2020-7-8 22:40

auto iter = info.begin()
这东西就是个迭代器的指针,你可以看看info是什么类型的 然后 替换就行了

dmxayjn 发表于 2020-7-8 22:46

云在天 发表于 2020-7-8 22:40
这东西就是个迭代器的指针,你可以看看info是什么类型的 然后 替换就行了

感谢回复,已经请教了大神已经解决了,我把修改好的代码也发上来,让更多人都知道。

dmxayjn 发表于 2020-7-8 22:47

已经解决了,已经修改的代码如下:
                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:47

本帖最后由 我的爱是你 于 2020-7-8 22:49 编辑

解决了就行

dmxayjn 发表于 2020-7-8 22:49

我的爱是你 发表于 2020-7-8 22:47
for( std::list::iterator iter =info.begin(); iter != info.end(); ++iter)
既然知道list 容器储存一 ...

嗯,还是要感谢回答,已经解决,方法一样。
页: [1]
查看完整版本: vs2003不支持auto,可以用什么来代替修改呢