首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

指针数组的嵌套小疑点,求。

2012-11-08 
指针数组的嵌套小问题,急求。。。MFC程序,要求实现封闭多位线(相当于不规则封闭多边形)的某些功能,但是我现在

指针数组的嵌套小问题,急求。。。
MFC程序,要求实现封闭多位线(相当于不规则封闭多边形)的某些功能,但是我现在画出来的线重绘时遇到问题。
  基本思想是,绘制的时候收集每个顶点,然后添加到动态数组(m_PTary)里面,右键结束当前图形绘制,然后把这个图形的动态数组再嵌套添加到另一个动态数组(m_ary)里面.然后重绘的时候两个for循环来取出点。

  我贴一些有关代码。
  添加点到动态数组:AddPoint(CPoint tmp_pt){ m_PTary.add( &tmp_pt ); }
  右键结束收集点后:AddGraph() { m_ary.add( &m_PTary ); m_PTary.RemoveAll(); }

  重绘函数: // m_gra 是管理类的全局变量 m_PTary、m_ary都是管理类下定义的数组。
  Draw() 
  { 
  CPoint *tmp_st_pt;
  CPoint *tmp_end_pt;
  for(int i=0;i< m_gra.m_ary.GetSize();i++)
  {
CPtrArray *tmp_ary = (CPtrArray*)(m_gra.m_ary.GetAt(i)); ————》 貌似就这句出了问题。我打断点发现数组并没有传给tmp_ary。所以下面点也没传过来。难道动态数组的指针不能再添加到数组里面吗。
  for(int j = 0;j < tmp_ary -> GetSize()-1;j++) { tmp_st_pt = (CPoint*)(tmp_ary -> GetAt(j));
tmp_end_pt = (CPoint*)(tmp_ary -> GetAt(j+1));

   
 小弟是新手 ,分不多,望高手赐教。

[解决办法]
AddPoint(CPoint tmp_pt){ m_PTary.add( &tmp_pt ); }
m_PTray里面存的都是形参的地址,对后面的程序来说,数据是无效的
改为AddPoint(CPoint &tmp_pt)
[解决办法]
AddGraph() { m_ary.add( &m_PTary ); m_PTary.RemoveAll(); }

你在m_ary里存的都是m_PTary的指针吧,然后,你又把这个m_PTary清空了。你后面读取的时候,当然是空的了。你应该在AddGraph()里,动态申请一个CPtrArray,然后,把m_PTay里的数据复制给申请的对象,将对象存入m_ary

热点排行