#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()
};
WTL && Controls array
Хочу создать массив элементов управления. Использую 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.
Заранее спасибо.
При определении метода после закрывающей фигурной скобки точку с запятой ставить необязательно. А вот при определении класса после фигурной скобки точку с запятой ставить обязательно!
Ты привео не совсем полный код. Не понятно, откуда взялся класс CCrossField (я допустил, что это CMyStatic. В CMyStatic и ContainerView не определены таблицы сообщений.
А теперь к сути вопроса.
Создать указатель_на_указатель_на_указатель не достаточно, надо еще и память выделить для этого монстра правильно (ты не выделяешь вовсе).
Не проще ли воспользоваться классом std::vector ?
Код:
Не забудь правильно удалить объекты, когда они будут уже не нужны.