komisches Problem mit Membervariable
-
Moinmoin alle miteinander,
ich habe ein Problem mit einer meiner Klassen (ich arbeite mit wxwidgets)
In ein paar Memberfunktionen hat eine Membervariable plötzlich keinen Wert mehr.Die Klasse habe ich so definiert:
class MDIParamEdit : public MDI { public: MDIParamEdit::MDIParamEdit(wxWindowID id,const wxString& title, const wxPoint& pos, const wxSize& size, long style, int idWndi) : MDI(id,title, pos, size, style), m_idWndi(idWndi) {} virtual void CreateObjects(); void ParamSwap(int a,int b); private: void ParamSpinUp(wxSpinEvent& event); void ParamSpinDown(wxSpinEvent& event); int m_idWndi; };
und so sieht in etwa mein Aufruf aus:
MDIParamEdit *frame = new MDIParamEdit(1,"",wxPoint(0,0),wxSize(600,400),wxSYSTEM_MENU,2);
Dadurch sollte die Membervariable m_idWndi ja den Wert 2 erhalten. Das tut sie auch, denn in der Funktion CreateObjects() kann ich richtig auf sie zugreifen.
In dieser Funktion erstelle ich mehrere SpinButtons und verknüpfe sie mit den beiden Funktionen ParamSpinUp() und ParamSpinDown():
void MDIParamEdit::CreateObjects() { ... wxSpinButton *sb = new wxSpinButton(scrWnd,1) ); sb->Connect(1,wxEVT_SCROLL_LINEUP ,wxSpinEventHandler(MDIParamEdit::ParamSpinUp)); sb->Connect(1,wxEVT_SCROLL_LINEDOWN,wxSpinEventHandler(MDIParamEdit::ParamSpinDown)); ... }
Diese beiden Funktionen sehen so aus und rufen eigentlich nur eine andere Memberfunktion (ParamSwap()) auf:
void MDIParamEdit::ParamSpinUp(wxSpinEvent& event) { int id = event.GetId()-1; ParamSwap(id,id-1); } void MDIParamEdit::ParamSpinDown(wxSpinEvent& event) { int id = event.GetId()-1; ParamSwap(id,id+1); } void MDIParamEdit::ParamSwap(int a,int b) { wxString strBuffer = Wnds.at(m_idWndi).tcs.at(a)->GetValue(); Wnds.at(m_idWndi).tcs.at(a)->SetValue( Wnds.at(m_idWndi).tcs.at(b)->GetValue() ); Wnds.at(m_idWndi).tcs.at(b)->SetValue( strBuffer ); }
Und genau dort passiert es: Wird das Event ausgelöst, so hat die m_idWndi plötzlich in keinen dieser 3 Funktionen (ParamSpinUp(), ParamSpinDown(), ParamSwap()) einen Wert, bzw. einen nur einen Zufälligen, sehr hohen. Auf jeden Fall nicht die 2, die sie eigentlich haben sollte.
Aber was mich jetzt noch mehr verwirrt: Wenn ich jetzt die Funktion ParamSwap() aus einer andere Funktion aufrufe und nicht über die von SpinButtonEvents ausgelösten Funktionen, so funktioniert es einwandfrei Dann hat m_idWndi in dieser Funktion plötzlich wieder den Wert 2
Code:frame->ParamSwap(2,3)
Ich hoffe ihr könnt mir bei meinem Problem helfen und mir sagen woran das liegt. (Wohlmöglich mal wieder irgendein Anfängerfehler)
MfG
PS: Ich war am überlegen, ob dieses Thema hierhin gehört oder eher zu den Frameworks. Aber da das Problem ja nichts mit wxWidgets zu tun haben kann (oder doch ôO), hab ich's mal hirhin gepostet
-
Wie wurde denn die Variable initialisiert, über die du die Event-Methoden aufrufst? (ich sehe in deinen Code-Fragmenten nicht, daß du 'frame' an deinen Spinbutton übergibst, also arbeitet der vermutlich mit einer ganz anderen Variablen)
-
Aaah, vielen Dank, das war der entscheidene Tipp
Ich hab jetzt einfach einen Parameter beim Connect-Befehl hinzugefügt und schon funktioniert es:sb->Connect(1,wxEVT_SCROLL_LINEUP ,wxSpinEventHandler(MDIParamEdit::ParamSpinUp),NULL,this);
Nochma danke für die Hilfe
MfG
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Andere GUIs - Qt, GTK+, wxWidgets verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.