十分不解,为何CList在第二次以后遍历时值就变了...(急问)
大致代码是这样的:
简要的说明下代码吧:
//用来存储手机名片姓名与号码
struct CONTACTPARTINFO
{
int nID;
BSTR strName;
BSTR strTelMobile;
};
类中声明:
CList<CONTACTPARTINFO, CONTACTPARTINFO &> m_lstPartContact;
//********************************************************************
//函数功能: 读取号簿信息(仅号码与姓名)保存到m_lstPartContact链表中
//********************************************************************
bool CContact::GetPartContact(void)
{
//得到pContact指针的部分省略...
m_lstPartContact.RemoveAll();
CONTACTPARTINFO contactPartInfo;
contactPartInfo.nID = i-1;
pContact->get_FirstName( &contactPartInfo.strName); pContact->get_MobileTelephoneNumber( &contactPartInfo.strTelMobile);
m_lstPartContact.AddTail(contactPartInfo);
}
//********************************************************************
// 函数功能: 显示号簿全部信息
// 参数: strContact为传出的参数,代表部分号簿内容
//********************************************************************
void CContact::ShowPart(CString& strContact)
{
POSITION pos = m_lstPartContact.GetHeadPosition();
while(pos)
{
strContact += m_lstPartContact.GetAt(pos).strName ;
strContact += m_lstPartContact.GetAt(pos).strTelMobile;
m_lstPartContact.GetNext( pos );
}
AfxMessageBox( strContact );
}
问题症状:
假如我输入两条名片信息 (名字,号码): (1,2) ,(3,4)
第一次打印出来是1234
第二次打印出来就是3434
后面假设你再添加两条名片 (5,6) (7,8)
打印出来就是34343434
我调试时,发现在CContact::GetPartContact(void) 中总是能正确获取到值啊,也就是加入前面四条时,m_lstPartContact 依次为(1,2) (3,4) (5,6) (7,8)啊,为何显示出来就变了咧?
问题出在遍历时吗? 急问?谢谢
规律:
连续输入四条:
第一次是12345678
第二次以后就是78787878