请教一下
怎么用CArray来定义多维数组
我定义的时候编译没错,可每次调用Add时就报错
error C2664: 'Add' : cannot convert parameter 1 from 'class UltraCArray_T<float,float>' to 'class UltraCArray_T<float,float>'
No copy constructor available for class 'UltraCArray_T<float,float>'
我的定义式这样子的:
typedef UltraCArray_T<float,float> CFloatArray;
UltraCArray_T<CFloatArray,CFloatArray> m_eigenvector;其中UltraCArray是我参照网上的说法,继承了CArray并且实现了操作符=
类的定义如下:
// UltraCArray_T.h
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)
#define AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <Afxtempl.h>
template <class TYPE, class ARG_TYPE>
class UltraCArray_T : public CArray <TYPE, ARG_TYPE>
{
public:
void operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs);};template <class TYPE, class ARG_TYPE>
void UltraCArray_T<TYPE, ARG_TYPE>
::operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs)
{
RemoveAll();
Append(rhs);
}#endif //
!defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)
怎么用CArray来定义多维数组
我定义的时候编译没错,可每次调用Add时就报错
error C2664: 'Add' : cannot convert parameter 1 from 'class UltraCArray_T<float,float>' to 'class UltraCArray_T<float,float>'
No copy constructor available for class 'UltraCArray_T<float,float>'
我的定义式这样子的:
typedef UltraCArray_T<float,float> CFloatArray;
UltraCArray_T<CFloatArray,CFloatArray> m_eigenvector;其中UltraCArray是我参照网上的说法,继承了CArray并且实现了操作符=
类的定义如下:
// UltraCArray_T.h
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)
#define AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <Afxtempl.h>
template <class TYPE, class ARG_TYPE>
class UltraCArray_T : public CArray <TYPE, ARG_TYPE>
{
public:
void operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs);};template <class TYPE, class ARG_TYPE>
void UltraCArray_T<TYPE, ARG_TYPE>
::operator =(const UltraCArray_T<TYPE, ARG_TYPE> &rhs)
{
RemoveAll();
Append(rhs);
}#endif //
!defined(AFX_ULTRACARRAY_T_H__552AA3BD_C40E_4090_B373_53767023912A__INCLUDED_)
你这里只有=是不够的。
UltraCArray_T(const UltraCArray_T <TYPE, ARG_TYPE> &rhs); template <class TYPE, class ARG_TYPE>
void UltraCArray_T <TYPE, ARG_TYPE>
::UltraCArray_Tconst UltraCArray_T <TYPE, ARG_TYPE> &rhs)
{
RemoveAll();
Append(rhs);
}
如:
定义class FloatArray
{
CArray<float, float> m_arrayFloat;
};CTypedPtrArray<CPtrArray, FloatArray*> m_Floats;
一维
CArray<int, int&> aryInt;
二维
CArray<aryInt*, aryInt*&> ary222;
三维
CArray<ary222*, ary222*&> ary333;
四维
...
这样做可以省去拷贝构造函数,但是由于数组保存的是指针,内存要记得清空!!!
比如CWordArray, CByteArray,这些类的效率是有保证的,
我猜可能是因为CArray对于简单数据类型的效率会稍微低一点,
才专门写出这些简单的Array的吧