读书人

CStringList作为函数参数的有关问题

发布时间: 2013-07-04 11:45:40 作者: rapoo

CStringList作为函数参数的问题
bool Ticket::IsContain(CStringList* list1,CStringList* list2)
{
POSITION rPos1;
POSITION rPos2;
bool temp=false;
while(rPos2!=NULL)
{
while(rPos1!=NULL)
{
CString test1=list1->GetNext(rPos1);
CString test2=list2->GetNext(rPos2);
if(list2->GetNext(rPos2)==list1->GetNext(rPos1))
{
temp=true;
}
}
if(!temp)
{
break;
}
}
return temp;
}

上面的函数中,传了两个CStringList*作为参数,但是在实际运行中,一旦执行
list1->GetNext(rPos1);就报错
我看了调试过程,list1和list2传进去后非空

我之前尝试了直接传CStringList进去,但是不可行~

请高手看看
[解决办法]
bool Ticket::IsContain(CStringList* list1,CStringList* list2)
{
// list2为空认为list1包含list2
if (list2->GetCount() <= 0)
{
return true;
}
CString str;
POSITION rPos;
rPos = list2->GetHeadPosition();
// 遍历list2
while (rPos != NULL)
{
str = list2->GetNext(rPos);
if (list1->Find(str)==NULL)
{
// 如果list2中有元素不在list1中则list1不包含list2
return false;
}
}
// list2所有元素都包含在list1中返回真
return true;
}

读书人网 >VC/MFC

热点推荐