carray与TREE结构

vickia 2003-06-20 12:58:11
下面关于CArray类与树的处理怎么出错了呀?
CArray<CString,CString>ary;
ary.SetSize(1);
ary.SetAt(0,"ABC");
HTREEITEM hItem;
hItem=m_tree.InsertItem("Root",TVI_ROOT);
m_tree.SetItemData(hItem,(DWORD)&ary.GetAt(0));
CString* p=(CString*)m_tree.GetItemData(hItem); //*p不会等于ABC,而这是我想要的!

...全文
19 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackblue 2003-06-20
  • 打赏
  • 举报
回复
GetAt返回的CString的临时变量,这个临时变量只在SetItemData那句才是存活的,该句结束,变量就销毁了。
CString* p1 = &ary[0];
m_tree.SetItemData(hItem,(DWORD)&ary.GetAt(0));
CString* p = (CString*)m_tree.GetItemData(hItem);//*p不会等于ABC,而这是我想要的!

对比一下p1和p的值,并不相同,CArray的[]函数返回的是数组元素的引用

解决:

m_tree.SetItemData(hItem,(DWORD)&ary[0]); //ary.GetAt(0) ===> ary[0]
CString* p = (CString*)m_tree.GetItemData(hItem);//*p不会等于ABC,而这是我想要的!

最后common_man(谢安王导)说得也很重要,做好把CArray变量做成类的成员变量
suxk 2003-06-20
  • 打赏
  • 举报
回复
up不明白什么意思
common_man 2003-06-20
  • 打赏
  • 举报
回复
CArray<CString,CString>ary;
——你这是个局部变量,出了函数就析构了,当然不行了
建议:
CStringArray m_arrStrs;//作为成员变量,采用现成的CStringArray

应该不会有问题了
joachern 2003-06-20
  • 打赏
  • 举报
回复
up

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧