Коллекция коллекций

Тема в разделе "MS Visual C++", создана пользователем DenskiY, 19 окт 2007.

Статус темы:
Закрыта.
  1. DenskiY

    DenskiY Гость

    Добрый вечер, участники конференции.
    Создаю SDI приложение, использую в нем коллекцию CTypedPtrArray<CObArray, CFigure*> m_FigArray.
    В коллекцию записываются геометрические фигуры. Поставлена задача создать коллекцию, в которой будут храниться кадры. (На каждом кадре могут быть свои фигуры) Я вижу ее так:
    Код (Text):
    typedef CTypedPtrArray<CObArray, CFigure*> CFigArray;
    CTypedPtrArray<CObArray, CFigArray*> m_FrameArr;
    CFigArray m_FrameArr;
    Добавление организую так:
    Код (Text):
    m_FrameArr.Add(&m_FigArray);
    Код (Text):
    CFigArray *temp=(CFigArray *)m_FrameArr[0];
    CFigure*f;
    m_FigArray.RemoveAll();
    for (int j=0;j<temp->GetSize();j++)
    {
    f=(CFigure*)temp->GetAt(j);
    m_FigArray.Add(f);
    }
    В чем может быть ошибка? Можно ли по-другому записать в m_FigArray m_FrameArr[0]?
    Спасибо за внимание и ответы.
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    У тебя m_FrameArr хранит указатели - т.е. копии объектов не создаются. Так что temp==&m_FigArray. Когда ты говоришь m_FigArray.RemoveAll(); temp тоже становится пустой.
     
  3. DenskiY

    DenskiY Гость

    Суть задачи - поработал с одним кадром (массивом m_FigArray), добавил его в m_FrameArr. Т.е. элементом m_FrameArr будут массивы m_FigArray, в каждом из которых будут свои объекты.
    При выводе кадра на экран я пытаюсь в m_FigArray записать m_FrameArr[0]. Проблема в том, что просто присвоить, разыменовав указатель не получается - выводится ошибка. Как сделать это правильно?
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Не, указатель на статические объекты не разименовывается. Не совсем понял что тебе надо (что куда записать?), но судя по всему m_FigArray должен создаваться в хипе через new CFigArray(), потом складывается в m_FrameArr, и создается новый объект аналогично. Потом не забыть удалить объекты из массива - MFC этого не сделает.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей