关于CArray的一些问题求助

serenahxr 2017-10-14 01:56:36
每次利用Add()将对象添加到数组pts中
但是最终pts.GetSize()的结果永远是1
调试的时候发现每执行一次pts.GetSize()
m_pData都是一个新的值(值是正确的,就是说是我希望传进数组里的那个值)
m_nSize和m_nMaxSize都是1

初学者,求轻喷
相关代码如下

//CGeoPolyline.cpp
void CGeoPolyline::AddPoint(CPoint pt)
{
pts.Add(pt);
}

void CGeoPolyline::Draw(CDC *pDC)
{

int size =pts.GetSize();
for(int i=0;i<size;i++)
{

if(i==0)
pDC->MoveTo(pts[i]);
else
pDC->LineTo(pts[i]);

}

//pDC->Polyline(pts.GetData(),size);

}


//CGeoPolyline.h
#pragma once
#include "GeoObject.h"
#include "afxtempl.h"
class CGeoPolyline :
public CGeoObject
{
public:
CArray<CPoint,CPoint>pts;
void AddPoint(CPoint pt);
void Draw(CDC *pDC);
CGeoPolyline(void);
~CGeoPolyline(void);
};



...全文
460 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
serenahxr 2017-10-14
  • 打赏
  • 举报
回复
恍然大悟如梦初醒!谢谢楼上
真相重于对错 2017-10-14
  • 打赏
  • 举报
回复
line=new CGeoPolyline;//有这句话难管如此, pt=new CPoint; pt->x=x; pt->y=y; //line->AddPoint(pt); line->pts.Add(*pt);
serenahxr 2017-10-14
  • 打赏
  • 举报
回复
//CView里的部分代码 CGeoPolyline *line; int x,y; CPoint *pt; while( !feof(fp) ) //判断文件是否结束 { fscanf(fp,"%d %d",&x,&y);//读取数据 line=new CGeoPolyline; pt=new CPoint; pt->x=x; pt->y=y; //line->AddPoint(pt); line->pts.Add(*pt); } layer->addObject(line); fclose(fp); //关闭文件 Invalidate(); 我觉得可能是和我每次传值都是用的pt有关,程序永远只是在改第一次传进去的值,而不是又添加了一个进去 所以、、这该怎么改啊、、难道要在CView里再加一个动态数组专门用来传值嘛/(ㄒoㄒ)/~~
开心秋水 2017-10-14
  • 打赏
  • 举报
回复
建议用sta::vector
来代替CArray
真相重于对错 2017-10-14
  • 打赏
  • 举报
回复
没有完整代码,建议考虑一下对象的生存期问题

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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