Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

WTL && Controls array

7.8K
23 июня 2004 года
svasi
1 / / 23.06.2004
Помогите, пожалуйста, ночинающему...
Хочу создать массив элементов управления. Использую wtl...
Объявляю класс следующим образом:

class CMyStatic:public CWindowImpl<CMyStatic,CStatic>
{
private:
int SomeElement;
public:
DECLARE_WND_SUPERCLASS(NULL, CStatic::GetWndClassName());

CMyStatic(int initial_value)
{
SomeElement=initial_value;
};

~CMyStatic(){};
}
Затем в другом классе создаю массив указателей, вот так:

class ContainerView:public CWindowImpl<ContainerView>
{
CMyStatic ***m_ControlsArray;

...
LRESULT OnCreate(UINT,WPARAM,LPARAM,BOOL&)
{
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
{ m_ControlsArray[j]=new CCrossField(5);
m_ControlsArray[j]->Create(m_hWnd);
}
}
}

Вот при вызове оператора new наблюдаю exception, и не знаю, что с ним делать... Был бы очень благодарен за помощь...
Исключение такое:
Unhandled exception at 0x00436cd1 in chesswtl.exe:
0xC0000005: Access violation reading location 0xcdcdcdcd.
Заранее спасибо.
3
24 июня 2004 года
Green
4.8K / / 20.01.2000
Для начала несколько замечаний по поводу синтаксиса.
При определении метода после закрывающей фигурной скобки точку с запятой ставить необязательно. А вот при определении класса после фигурной скобки точку с запятой ставить обязательно!

Ты привео не совсем полный код. Не понятно, откуда взялся класс CCrossField (я допустил, что это CMyStatic. В CMyStatic и ContainerView не определены таблицы сообщений.

А теперь к сути вопроса.
Создать указатель_на_указатель_на_указатель не достаточно, надо еще и память выделить для этого монстра правильно (ты не выделяешь вовсе).
Не проще ли воспользоваться классом std::vector ?

Код:
#include <vector>

class CMyStatic:public CWindowImpl<CMyStatic,CStatic>
{
private:
    int SomeElement;

public:
    DECLARE_WND_SUPERCLASS(NULL, CStatic::GetWndClassName());

    BEGIN_MSG_MAP(CMyStatic)
        ...........
    END_MSG_MAP()

    CMyStatic(int initial_value) :SomeElement(initial_value)
    {}

    ~CMyStatic()
    {}
};

class ContainerView:public CWindowImpl<ContainerView>
{
    std::vector< std::vector<CMyStatic*> > m_ControlsArray;

public:
    LRESULT OnCreate(UINT,WPARAM,LPARAM,BOOL&)
    {
        m_ControlsArray.resize(10);
        for(int i=0;i<10;i++)
        {
            m_ControlsArray.resize(10);
            for(int j=0;j<10;j++)
            {
                CMyStatic *p = new CMyStatic(5);
                m_ControlsArray[j] = p;
                m_ControlsArray[j]->Create(m_hWnd);
            }
        }

        return 0;
    }

    BEGIN_MSG_MAP(ContainerView)
        ...........
    END_MSG_MAP()
};


Не забудь правильно удалить объекты, когда они будут уже не нужны.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог