首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

map表find方法的怪异有关问题

2012-04-24 
map表find方法的怪异问题代码如下:C/C++ codevoid CMyApp::Test(char *t){vpObject *ponew vpObject()g_

map表find方法的怪异问题
代码如下:

C/C++ code
void CMyApp::Test(char *t){    vpObject *po=new vpObject();    g_pHPObjManager[t]=po;    Test1();}void CMyApp::Test1(){    CString str;    map<char *,vpObject *>::const_iterator i;    map<char *,vpObject *>::iterator j;    for(i=g_pHPObjManager.begin();i!=g_pHPObjManager.end();i++)    {                        str.Format("%s",i->first);                   //str="ee"        j=g_pHPObjManager.find("ee");                //"ee"为Test传入的参数        str.Format("%s",j->first);                   //程序崩溃????!!!!!    }}

如果Test这样写就没问题(程序不会崩溃)
C/C++ code
void CMyApp::Test(char *t){    vpObject *po=new vpObject();    g_pHPObjManager["ee"]=po;    Test1();}

这究竟是为什么呢?

[解决办法]
map用的是operator ==。char*的operator ==是直接比较指针不是比较字符串。所以你find"ee"就直接找不到,然后j==map.end(),->first就throw exception了。
所以干啥要用char*不用string……
[解决办法]
顶LS,把char *换成string吧
[解决办法]
探讨

用string没有问题了,如果要用char*该怎么办呢

热点排行