Fehler bei wxDialog!



  • HI Leute!

    Ich bekomme mein wxDialog irgendwie nicht hin.

    Hier mein Code:

    So rufe ich mein Dialog auf:

    float f_var;
    
    myDialog dlg = new myDialog( NULL );
        if( dlg->ShowModal() == wxID_OK )
            f_var = ((float) dlg->GetReturnCode())/100;
    

    Mein Dialog hat ein Eingabefeld und ein OK-Button. Beim Klicken auf den Button wird folgende Funktion ausgeführt:

    float f_value;
    
    std::istringstream inp( (std::string) ed_wert->GetValue() );
    inp >> f_value;
    
    SetReturnCode( (int) (f_value * 100) );
    
    EndModal( wxID_OK );
    

    Kommt mein Programm bis zu dem Punkt dlg->ShowModal(); wird das Programm beendet.

    Was kann ich machen, bzw. was mache ich falsch?



  • KRibel schrieb:

    [...]

    float f_var;
    
    myDialog dlg = new myDialog( NULL );
        if( dlg->ShowModal() == wxID_OK )
            f_var = ((float) dlg->GetReturnCode())/100;
    

    [...]
    Was kann ich machen, bzw. was mache ich falsch?

    Ist das ein Tippfehler beim übertragen ins Forum in der 3ten Zeile oder steht das wirklich so im Code?
    Kann mir irgendwie nicht vorstellen das ein Compiler das so annimmt, aber ich habs auch noch nie probiert...

    Ansonsten kann ich dir zur Zeit nicht weiterhelfen da ich gerade nicht auf meine Anwendungen zugreifen kann in denen ich wxWindows/wxWidgets verwende. Erst heut Abend.



  • das ist wirklich so, wie es im Code steht.



  • Das ist aber ein bisschen seltsam das ein Compiler es zulässt, dass man den Dereferenzierungsoperator auf einen nicht Zeiger anwenden kann.


  • Mod

    Lies doch mal die Tutorials zu wxWidgets im Magazin, dann müsstest du auch wissen wie das mit den Dialogen funktioniert... 😉

    Generell fallen mir 2 Punkte auf:
    1. für new brauchts nen pointer, und dann fehlt da auch ein delete. Für kleinere Dialoge braucht es imho jedoch gar kein new. MyDialog dlg(this); reicht.
    2. NULL als Parent an die Klasse zu übergeben ist evtl. auch nicht ganz sinnvoll, sollte aber nicht der Grund für den Crash sein.

    Was sagt der Debugger denn dazu?



  • Danke Leute. Problem gelöst!

    1. Fehler war der NULL-Pointer.
    2. Fehler der Dialog wurde aus einem wxThread aufgerufen -> Habe ein Event im Hauptprogramm erstellt, jetzt gehts.
    3. ich beende es mit dlg->Destroy();


Anmelden zum Antworten