Проблема в том, что CArray
не имеет конструктора копирования и operator=()
.Но вы можете легко расширить этот класс и реализовать необходимые функции:
template <class TYPE, class ARG_TYPE>
class CArrayEx : public CArray<TYPE, ARG_TYPE>
{
// Construction
public:
CArrayEx ()
{
};
CArrayEx (const CArrayEx &x)
{
*this = x;
};
// Assigment
public:
CArrayEx &operator = (const CArrayEx &x)
{
if(this != &x)
{
Copy(x);
}
return *this;
};
};
После этого вы можете определить свои собственные типы, например так:
typedef CArrayEx<CPoint, CPoint&> CPointArray;
typedef CArray<CPointArray, CPointArray&> CDoublePointArray;
И вот довольно простой примеркак это использовать:
CDoublePointArray doubleArray;
CPointArray singleArray;
singleArray.Add(CPoint(10,10));
doubleArray.Add(singleArray);
В качестве альтернативы CArray
я бы предложил использовать std::vector
.Вы можете использовать его "из коробки", так как он поставляется с конструктором копирования.