Полный код — более 400 строк. Вы можете найти это здесь: http://hostcode.sourceforge.net/view/4122 или если у вас установлены wxwidgets, то под WX_WIDGETS_ROOT \ Samples \ Мастер \ wizard.cpp.
Я пытался скомпилировать, но получить
«ошибка C2065:« m_bitmap »: необъявленный идентификатор» в строке 122.
Затем я прокомментировал эту строку, и она компилируется нормально. Но когда я запускаю его и выбираю одну из этих команд меню:
он переходит к конструктору MyWizard и вылетает в строке m_page1 = new ….
MyWizard::MyWizard(wxFrame *frame, bool useSizer)
: wxWizard(frame,wxID_ANY,_T("Absolutely Useless Wizard"),
wxBitmap(wiztest_xpm),wxDefaultPosition,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
// a wizard page may be either an object of predefined class
m_page1 = new wxWizardPageSimple(this);<---------------- HERE
и дал эту ошибку:
Необработанное исключение в 0x004425ec в wizard.exe: 0xC0000005: Доступ
нарушение чтения местоположения 0xcdcdcdd1.
Я проверил в отладчике и увидел, что он идет к
void wxWizardPage::Init()
{
m_bitmap = wxNullBitmap;<--- HERE
}
и затем несколько внутренних вызовов позже, пытаясь получить доступ к m_refData-> m_count, где m_refData содержит мусор m_refData = 0xcdcdcdcd {m_count = ??? } а затем разбился.
void wxObject::UnRef()
{
if ( m_refData )
{
wxASSERT_MSG( m_refData->m_count > 0, _T("invalid ref data count") );<----- HERE
if ( --m_refData->m_count == 0 )
delete m_refData;
m_refData = NULL;
}
}
Вот стек вызовов, если он будет полезен:
wizard.exe! wxObject :: UnRef () Строка 346 + 0x6 байт C ++
wizard.exe! wxObject :: Ref (const wxObject & клон) Line 335 C ++
wizard.exe! wxObject :: operator = (const wxObject & другое) Линия 428 С ++
wizard.exe! wxGDIObject :: operator = (const wxGDIObject & __that) + 0x13
байты C ++ wizard.exe! wxGDIImage :: operator = (const wxGDIImage &
__that) + 0x13 байт C ++ wizard.exe! wxBitmap :: operator = (const wxBitmap & __that) + 0x13 байт C ++wizard.exe! wxWizardPage :: Init () Строка 126 C ++ wizard.exe! wxWizardPage :: wxWizardPage () Строка 50 + 0x46 байт C ++
wizard.exe! wxWizardPageSimple :: wxWizardPageSimple (wxWizard * parent,
wxWizardPage * prev, wxWizardPage * next, const wxBitmap & битовая карта,
const char * resource) Строка 113 + 0x2e байт C ++
wizard.exe! MyWizard :: MyWizard (wxFrame * frame, bool useSizer) Строка
376 + 0x31 байт C ++
Задача ещё не решена.
Других решений пока нет …