我定义了一个最简单的obList,如下
class watchObj : public CObject  
{
public:
watchObj();
virtual ~watchObj();
public:
int  m_id;
CString m_desc;};
typedef CTypedPtrList<CObList, watchObj*> CwatchObjList;在view的构造函数中初始化m_list;
m_obj.m_id=1;
m_obj.m_desc="hehe";
m_list.AddTail(& m_obj);
m_obj.m_id=2;
m_obj.m_desc="haha";
m_list.AddTail(& m_obj);
m_obj.m_id=3;
m_obj.m_desc="xixi";
m_list.AddTail(& m_obj);然后,使用findIndex()函数如下:
POSITION pos,pos1,pos2;
CString str;
pos1=m_list.FindIndex(1);
pDC->TextOut(300,200,m_list.GetAt(pos1)->m_desc); pos2=m_list.FindIndex(2);
pDC->TextOut(400,200,m_list.GetAt(pos2)->m_desc);
结果为什么打出来的事两个xixi ???
为什么阿?请指点!论理说应该行阿?

解决方案 »

  1.   

    是不是GetAt的毛病,它自动移位置了
      

  2.   

    CObList里只保存数据对象的指针,你AddTail的几个其实指向同一个,所以会以最后修改的为准可以这样解决
    watchObj* m_obj
       m_obj = new watchObj;
    m_obj.m_id=1;
    m_obj.m_desc="hehe";
    m_list.AddTail(m_obj);
       m_obj = new watchObj; m_obj.m_id=2;
    m_obj.m_desc="haha";
    m_list.AddTail(& m_obj);
       m_obj = new watchObj; m_obj.m_id=3;
    m_obj.m_desc="xixi";
    m_list.AddTail(& m_obj);
      

  3.   

    哦忘了,应该把"&"全部去掉