一、获得返回值:
比如定义fun(CArray<int, int &> &array)
void ansnode(int num,CArray<double,double&> m_adX, CArray<double,double&> m_adY, CArray<double,double&> m_adZ);
void ansysdata::ansnode(int num,CArray<double,double&> *m_adX, CArray<double,double&> *m_adY, CArray<double,double&> *m_adZ)
infilex.open("d:/intface/M_ADX.TXT.txt",ios::in);
infiley.open("d:/intface/M_ADX.TXT.txt",ios::in);
infilez.open("d:/intface/M_ADX.TXT.txt",ios::in);
outfilex.open("d:/intface/M_ADX1.TXT.txt",ios::in);
outfiley.open("d:/intface/M_ADX2.TXT.txt",ios::in);
outfilez.open("d:/intface/M_ADX3.TXT.txt",ios::in);
outfilex<<m_adX.GetAt(i)<<endl;
outfiley<<m_adY.GetAt(i)<<endl;
outfilez<<m_adZ.GetAt(i)<<endl;
CString strProductDescribe;
CArray <DriverItem,DriverItem&> DriverArray;
CArray <Object,Object> Var1;
CArray <Object,Object&> Var2;
第一个参数是CArray的返回的参数,第二个参数是传递给CArray的参数。即,当使用第二种形式定义Carray数组时,使用Add()时是一个引用类型的参数。
最近一直在编写一个绘图程序,为了保存多个double型点坐标,这里我采用了定义集合类CArray<TYPE, ARG_TYPE>CPointDArray来保存多点,然后定义坐标转换函数ConvertToXYs(CPointDArray,long* xy),将double坐标转换为long型坐标,这是就出现几种常见错误,"CPointDArray缺少构造函数,或者是拷贝构造函数不存在”,‘不能将参数 1 从“CArray<TYPE,ARG_TYPE>”转换为“CArray<TYPE,ARG_TYPE>”,从这两个问题入手,举例说明问题。
下面代码为我修改多次后总结的一个实例,照着此方法可以推广:
1.建立一个VC6工程 ,在CTestView中,添加一个OnLButtonDown,在这里实现点的绘制。
2.在CTestView.h中,自定义double类型的点类以及数组
CPointD(const double dx,double dy)
CPointD(const CPointD& pnt)
CPointD& operator=(const CPointD& rhs)
typedef CArray<CPointD,CPointD>CPointDArray; //double 型数组
typedef CArray<POINT,POINT&>LPointArray;//long型数组
注意这里CArray<CPointD,CPointD>可以用CArray<CPointD*,CPointD*>,实验证明没有问题。
3.在视图类CTestView定义全局变量CPointDArray plist;
定义函数void ConvToXYs(const CPointDArray &alist, LPointArray& llist);//&alist为常应用,保存函数中不修改数据,&llist是alist转
//换成long后的数组。这里就是出现上述常见问题的症结。
void CTestLineView::ConvToXYs(const CPointDArray &alist, LPointArray& llist)
CPointD p = alist.GetAt(i);
llist[i].x = (long)(jing+0.5);//这是关键步骤,可以当数组用
llist[i].y = (long)(wei+0.5);//
void CTestLineView::OnLButtonDown(UINT nFlags, CPoint point)
CPen* pOldPen = (CPen*)pDC.SelectStockObject(2);
// CPointD *p=new CPointD(i*3.5f,i*5.5f);
plist.Add(CPointD(i*3.5f,i*5.5f));
ConvToXYs(plist,longpoints);
pDC.Polyline(longpoints.GetData(),plist.GetSize());
str.Format("%d",longpoints.GetSize());
AfxMessageBox(str,MB_OK);
// Restore the original device context objects.
pDC.SelectObject(pOldPen);
e->GetErrorMessage(lp,250);
CView::OnLButtonDown(nFlags, point);
最后在~CTestLineView中清除plist。
CTestLineView::~CTestLineView()
本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/1118301,如需转载请自行联系原作者