在codeblocks中大量使用多重继承,当需要使用多重继承的子类的回调函数时会发生严重的错误,比如EditorManager这个类。class DLLIMPORT EditorManager : public Mgr, public wxEvtHandler{…………………………….DECLARE_EVENT_TABLE()};这个类从wxEvtHandler继承,也就意味着这个类中的一些成员函数将做为事件处理的回调函数。以此同时这个类又继承自Mgr,这就造成了vs2005在使用vptr时将发生错误。在EditorManager的构造函数中调用了一个函数:// class constructorEditorManager::EditorManager(): m_pNotebook(0L),m_LastFindReplaceData(0L),m_pSearchLog(0),m_SearchLogIndex(-1),m_SashPosition(150), // no longer usedm_isCheckingForExternallyModifiedFiles(false){…………………….Manager::Get()->GetAppWindow()->PushEventHandler(this);…………………….}PushEventHandler的函数声明为:void wxWindowBase::PushEventHandler(wxEvtHandler *handler)注意这个声明中接受的是wxEvtHandler类型的指针,当vs2005把this赋给handler时,它将在this值的基础上加上4个字节。当发生特定事件时,将执行这样的代码:(handler->*func)(event);但由于handler比this值多了4个字节,因此这个调用虽然可以进入函数里面,但是由于整个类的指针已经发生的偏移,因而程序必然crash。解决这个问题的办法只能是将多重继承改为单继承。