十分不解,为何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
简要的说明下代码吧:
//用来存储手机名片姓名与号码
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
...全文
相关推荐
CList.rar_CList_CList mfc_add_cli_list control
**遍历元素**:CList使用迭代器进行遍历,通过`GetNext()`和`GetPrev()`方法可以依次访问列表中的每个元素。迭代器在遍历时扮演了指向当前元素的角色,同时提供了安全的增减操作。
CList.zip_CList
CList的成员函数:1. `SetAt()`:在指定位置设置元素值。2. `GetCount()`:返回链表中的元素数量。3. `IsEmpty()`:检查链表是否为空。4.
IBM大型机CLIST语言红皮书 TSO clist
《IBM大型机CLIST语言红皮书:TSO clist》是IBM官方出版的一部详细介绍CLIST(Command LIST)脚本语言的专业书籍,适合初学者作为入门指南。
CList用法及其成员的使用
同样,空链表会返回未定义值。- AddHead:在链表头部添加一个新元素或另一个链表的所有元素,并返回新头部位置的POSITION值。
Clist的使用
**CList的基本概念** CList是一个模板类,它可以存储任何类型的对象,只要这些对象能够正确地执行赋值操作。CList内部采用双向链表实现,每个元素都有前驱和后继,支持快速的插入和删除操作。


