完整的代码超过400行。您可以在此处找到它:http://hostcode.sourceforge.net/view/4122或者如果您安装了wxwidgets,则在 WX_WIDGETS_ROOT \ samples \ wizard \ wizard.cpp 下。
我试着编译但得到了 "错误C2065:' m_bitmap' :未声明的标识符"在第122行。
然后我评论了那条线并且编译好了。但是当我运行它并选择其中一个菜单命令时:
它转到MyWizard构造函数并在m_page1 = new ... line崩溃。
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
并给出了这个错误:
wizard.exe中0x004425ec处的未处理异常:0xC0000005:Access 违规读取位置0xcdcdcdd1。
我检查了调试器并看到它转到了
void wxWizardPage::Init()
{
m_bitmap = wxNullBitmap;<--- HERE
}
然后一些内部调用后来尝试访问m_refData-&gt; 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&amp; clone)第335行C ++ wizard.exe!wxObject :: operator =(const wxObject&amp; other)Line 428 C ++ wizard.exe!wxGDIObject :: operator =(const wxGDIObject&amp; __that)+ 0x13 bytes C ++ wizard.exe!wxGDIImage :: operator =(const wxGDIImage&amp; __that)+ 0x13字节C ++ wizard.exe!wxBitmap :: operator =(const wxBitmap&amp; __that)+ 0x13 bytes 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&amp;位图, const char * resource)第113行+ 0x2e字节C ++ wizard.exe!MyWizard :: MyWizard(wxFrame * frame,bool useSizer)Line 376 + 0x31字节C ++