请教一下
怎么用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_)

解决方案 »

  1.   

    CArray中的成员,必须支持两个函数,一个就是拷贝构造,一个就是=。当然如果是简单的数据类型,自然没有问题,如果是CArray这类模板类,你必须先实现它们的这两个函数,你才能进行GetAt和SetAt等操作。否则它不知道你要进行怎样的复制操作。
    你这里只有=是不够的。
    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); 
      

  2.   

    可以换个方式
    如:
    定义class FloatArray
    {
        CArray<float, float> m_arrayFloat;
    };CTypedPtrArray<CPtrArray, FloatArray*>  m_Floats;
      

  3.   

    用指针吧,
    一维
    CArray<int, int&> aryInt;
    二维
    CArray<aryInt*, aryInt*&> ary222;
    三维
    CArray<ary222*, ary222*&> ary333;
    四维
    ...
    这样做可以省去拷贝构造函数,但是由于数组保存的是指针,内存要记得清空!!!
      

  4.   

    谈谈CArray的效率如何,如果是简单数据类型值得一用吗?
      

  5.   

    如果想用简单数据类型,MFC有专门的Array的,
    比如CWordArray, CByteArray,这些类的效率是有保证的,
    我猜可能是因为CArray对于简单数据类型的效率会稍微低一点,
    才专门写出这些简单的Array的吧