[wxWidgets] Absturz beim Zugriff auf einen Klassenmember aus Eventmethode?
-
Hallo,
ich habe im folgenden, vereinfachten Beispiel einen Button erzeugt, und diesen mittels
Connect
mit einer Eventmethode verbunden. Sobald nun beim Auftreten eines Events diese Methode aufgerufen wird, und ich von da aus auf irgendeine Klassenmethode, bzw. einen Klassenmember zugreife, stürzt das Programm ab.Solange aber nur mit lokalen Variablen gearbeitet wird, läuft das Programm komischerweise ganz normal weiter:
class MainWindow : public wxFrame { private: int foo; wxPanel* panel; public: void OnClickButton(wxMouseEvent& event) { foo = 8; // Zugriff auf Klassenmember, Absturz! int foo = 8; // Kein Fehler... } MainWindow(const char* title) : wxFrame(NULL, wxID_ANY, title) { panel = new wxPanel(this, -1, -1, -1, -1); wxButton* button = new wxButton(panel, wxID_ANY, "Button"); button->Connect(wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)(&MainWindow::OnClickButton)); } };
Jemand eine Idee, an was das liegen könnte?
Nachtrag: Im Debug-Build stürzt das Programm beim Ändern der foo-Variable nicht ab, aber beim Aufruf von z.B.panel->SetBackgroundColour(...)
schon, das gibt nämlich eine Access Violation...
-
Hast du dir im Debugger mal den Wert von this ausgeben lassen? Klingt als würde der in's Nirvana zeigen.
Dein OnClickButton() erwartet 'nen wxMouseEvent&. Richtig wäre ein wxCommandEvent&
-
Gute Anregung mit
this
. Innerhalb des Klassenkonstruktors besitztthis
noch einen gültigen Wert, aber in der Event-Methode zeigt er tatsächlich in's Nirvana... komme damit aber nicht gerade auf den grünen Zweig. Warum ist das so?
-
push
-
wxMouseEvent ist in diesem Fall falsch.
Und dann musst du noch die Eventsink bei Connect angeben:
button->Connect(EVENT_TYPE,EVENT_HANDLER,NULL,this);
-
Argh, es war also die fehlende Eventsink, jetzt klappt es wunderbar. Vielen Dank!