Quando o virtual não funciona
Eu tenho um erro estranho nas minhas aulas de C ++ no momento. Eu tenho uma classe de wrapper ActiveX (como parte do wxWidgets) à qual adicionei uma nova função virtual. Eu tenho outra classe que herda do ActiveX (wxIEHtmlWin), no entanto, a classe ActiveX sempre chama sua própria função em vez da classe no wxIEHtmlWin que a substitui.
Não sei por que isso está acontecendo. Eu fiz a função pura virtual e agora o programa falha quando faz a chamada de função, mas compila bem caso contrário. Existe alguma maneira de desativar funções virtuais ou eu encontrei um bug no Visual Studio?
Classe ActiveX
protected:
virtual FrameSite* getNewFrameSite()=0;
classe wxIEHtmlWin
class wxIEHtmlWin : public wxActiveX
{
protected:
FrameSite* getNewFrameSite();
}
FrameSite* wxIEHtmlWin::getNewFrameSite()
{
return new gcFrameSite(this);
}
Edit: Eu adicionei outra função de teste (retorna um int) e ainda estraga tudo.
Link para o código em questão:http://lodle.net/public/iebrowser.rar
Editar:
OK, graças à resposta abaixo, consegui que funcionasse. O que eu fiz foi criar a classe activex em duas partes (como sugerido), mas no wxIEHtmlWin chamei a segunda parte no código do construtor. Igual a:
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();
}
Agora eu sei por que o wxWidgets suporta construção de duas partes.