Как использовать CArray внутри CArray в MFC? - PullRequest
0 голосов
/ 13 марта 2019

Мне нужно использовать пользовательский массив в новом массиве, как эти.

typedef CArray<CPoint,CPoint&> arr1;
typedef CArray<arr1,arr1&> arr2;

arr1 a;
arr2 b;

b.Add(a);

Я получаю эту ошибку:

ошибка C2248: 'CObject :: operator =': не можетдоступ к приватному члену, объявленному в классе 'CObject'

1 Ответ

3 голосов
/ 13 марта 2019

Проблема в том, что 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.Вы можете использовать его "из коробки", так как он поставляется с конструктором копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...