Problem bei EVENT_TABLE und virtual geerbten Klassen
-
Hallo C++ Gemeinde,
Ich habe folgende kleinen Versuchklassen entwickelt:
Klasse norm2.h:
#ifndef __norm2__ #define __norm2__ // Header #include <wx/wx.h> class norm2 : public wxEvtHandler { public: // c d tor norm2(); virtual ~norm2(); // EIne Funktion bool EineNorm2Funktion() const; }; #endif // __norm2__
Klasse norm2.cpp:
// Eigener Header #include "norm2.h" // Header aus header #include <wx/wx.h> // c d tor norm2::norm2() { } norm2::~norm2() { } // EIne Funktion bool norm2::EineNorm2Funktion() const { return true; }
Klasse norm1.h:
#ifndef __norm1__ #define __norm1__ // Header #include <wx/wx.h> #include "norm2.h" #include "nenTest.h" enum myNormIds{ NORM_BUTTON_ID }; class norm1 : /*virtual*/ public norm2 //, virtual public irgendNeKlasse { protected: DECLARE_EVENT_TABLE(); public: // c d tor norm1(); ~norm1(); // Funk im Norm 1 bool Norm1FunkGet() const; // event void TheEvent(wxCommandEvent& event); }; #endif // __norm1__
Klasse norm1.cpp:
// eigener #include "norm1.h" // Header header #include <wx/wx.h> #include "norm2.h" BEGIN_EVENT_TABLE(norm1, norm2) EVT_BUTTON(NORM_BUTTON_ID, norm1::TheEvent) END_EVENT_TABLE(); // c und d tor norm1::norm1() { } norm1::~norm1() { } // Funk im Norm 1 bool norm1::Norm1FunkGet() const { return true; } // event void norm1::TheEvent(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(_T("Nachricht norm1")); }
Welches soweit lauffähig ist. Jetzt müsste ich (natürlich hier bei der Klassen Struktur nicht nötig aber in meinem Hauptprojekt) von der Klasse 'norm2' 'virtual' erben. Was mir folgende Fehlermeldungen einbring:
1>u:\wxwidgetsprogs\project1\versuche\virt_evt_table\virt_evt_table\norm1.cpp(11) : error C2440: 'static_cast': 'void (__thiscall norm1::* )(wxCommandEvent &)' kann nicht in 'wxCommandEventFunction' konvertiert werden 1>u:\wxwidgetsprogs\project1\versuche\virt_evt_table\virt_evt_table\norm1.cpp(11) : error C2440: 'Typumwandlung': 'void (__thiscall norm1::* )(wxCommandEvent &)' kann nicht in 'wxEventFunction' konvertiert werden 1> Zeiger auf Elemente besitzen unterschiedliche Darstellungen; wechselseitige Typumwandlung nicht möglich 1>u:\wxwidgetsprogs\project1\versuche\virt_evt_table\virt_evt_table\norm1.cpp(11) : error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. 1>u:\wxwidgetsprogs\project1\versuche\virt_evt_table\virt_evt_table\norm1.cpp(11) : error C2440: 'Initialisierung': 'int' kann nicht in 'const wxEventTableEntry' konvertiert werden 1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig
Was mir aufzeigt das er meine 'EventFunktion' nicht konvertieren kann bzw. er auch keinen passenden C'tor findet.
Des weitern habe ich auch noch das Problem, selbst wenn ich von 'norm2' (also der Klasse die den wxEvtHandler erbt) nicht virtuell erbe ich aber irgendeine andere Klasse in 'norm1' virtual erbe (s.Quelltext Kommentar in 'norm1' ich folgende Warnung erhalte:
1>u:\wxwidgetsprogs\project1\versuche\virt_evt_table\virt_evt_table\norm1.cpp(11) : warning C4407: Umwandeln von verschiedenen Zeigern in Memberrepräsentationen. Der Compiler generiert möglicherweise den falschen Code.
Über Google habe ich Sachen gefunden wie ' kompilieren Sie mit /vmm' um evtl. C4407 zu vermeiden. Was allerdings auch zu keinem Ergebnis führte.
Meine Frage wär nun ist es überhaupt möglich 'virtual' von der Klasse zu erben die vom 'wxEvtHandler' erbt??
Und ist es überhaupt möglich irgendeine Klasse 'virtual' in meine Klasse die einen EVENT_TABLE hat zu erben ohne das ich die Warnung C4407 erhalte ??