У меня странная ошибка в моих классах C ++ в данный момент. У меня есть класс-оболочка ActiveX (как часть wxWidgets), к которому я добавил новую виртуальную функцию. У меня есть другой класс, который наследуется от класса ActiveX (wxIEHtmlWin), однако класс ActiveX всегда вызывает свою собственную функцию вместо функции в wxIEHtmlWin, которая переопределяет ее.
Я не могу понять, почему это происходит. Я сделал функцию чисто виртуальной, и теперь программа вылетает при вызове функции, но в противном случае компилируется нормально. Есть ли способ отключить виртуальные функции или я обнаружил ошибку в Visual Studio?
ActiveX класс
protected:
virtual FrameSite* getNewFrameSite()=0;
wxIEHtmlВ классе
class wxIEHtmlWin : public wxActiveX
{
protected:
FrameSite* getNewFrameSite();
}
FrameSite* wxIEHtmlWin::getNewFrameSite()
{
return new gcFrameSite(this);
}
Редактировать: я добавил еще одну тестовую функцию (возвращает целое число) и все еще облажался.
Ссылка на код вопроса: http://lodle.net/public/iebrowser.rar
Edit:
ОК, благодаря ответу ниже, я получил его на работу. Что я сделал, так это создал класс activex из двух частей (как предложено), однако в wxIEHtmlWin я назвал вторую часть в коде конструктора. Вот так:
wxIEHtmlWin::wxIEHtmlWin(wxWindow * parent, wxWindowID id, const wxPoint& pos,const wxSize& size,long style, const wxString& name) : wxActiveX()
{
wxActiveX::Create(parent, PROGID, id, pos, size, style, name);
SetupBrowser();
}
Теперь я знаю, почему wxWidgets поддерживает построение двух частей.