CTypedPtrList<CPtrList,CPic*> m_Lines;//这是定义的链表对象CPic是自己定义的类。
POSITION pos;
pos=m_Lines.GetHeadPosition();
CPic * temp;
while(pos)
{

   temp=m_Lines.GetNext(pos);
   CString tem;
   tem.Format("%d",temp->m_Width);
   AfxMessageBox(tem);//检测遍厉所取得的值
}结果发现每次取得的都是链表的最后一个节点的值,虽然链表所有的节点都遍厉过了,不知道是何原因!

解决方案 »

  1.   

    temp=m_Lines.GetNext(pos); // 是什么意思?对Pos怎么没有更改的操作?
      

  2.   

    这行代码的意思就是取得pos位置的下一个节点
      

  3.   

    就是啊,我也搞不清楚,可看起来似乎没有对pos进行操作吧,可它循环的次数却是正确的
      

  4.   

    class CPic
    {
    public:
    int m_Width;
    };
    #include <afxtempl.h>
    //...
    CTypedPtrList<CPtrList,CPic*> m_Lines;//这是定义的链表对象CPic是自己定义的类。
    void CListDlg::OnButton1() 
    {
    CPic *pPic1 = new CPic;
    pPic1->m_Width = 0;
    m_Lines.AddHead(pPic1); CPic *pPic2 = new CPic;
    pPic2->m_Width = 1;
    m_Lines.AddHead(pPic2); CPic *pPic3 = new CPic;
    pPic3->m_Width = 2;
    m_Lines.AddHead(pPic3); //演示用,没用delete
    }void CListDlg::OnButton2() 
    {
    POSITION pos;
    pos=m_Lines.GetHeadPosition();
    CPic * temp;
    while(pos)
    {

    temp=m_Lines.GetNext(pos);
    CString tem;
    tem.Format("%d",temp->m_Width);
    AfxMessageBox(tem);//检测遍厉所取得的值
    }
    }
    结果2,1,0
      

  5.   

    试试在
    temp=m_Lines.GetNext(pos);
    上面加上一句:
    temp = new CPic();