Anfängerproblem mit benutzerdefinierten Funktionen



  • Hallo,

    ich habe ein dummes Problem mit einer benutzerdefinierten Funktion. Bei folgender Funktion ohne Rückgabewert möchte ich Eigenschaften von Komponenten auf dem Hauptformular (frm_Main) ändern. Das funktioniert aber überhaupt nicht. Sobald ich auf das Formular bzw auf Eigenschaften von Komponenten zugreifen möchte, bricht das Programm mit einer Zugriffsverletzung ab. Was mache ich falsch?

    Tfrm_Main *frm_Main;
    void Aktualisieren();
    ....
    ....
    ....
    void Aktualisieren()
    {
      int i;
      AnsiString str_TEXT;
    
      if (frm_Main->cb_REAL->Checked==true)
      {
        str_TEXT="realistisch";
        i=1;
      } else {
        str_TEXT="theoretisch";
        i=0;
      }
      frm_Main->txt_KBs->Text=IntToStr(array_WERTE[frm_Main->cbo_INET->ItemIndex][i]);
      frm_Main->txt_KBs->Hint=" Maximale Übertragungsrate (" + str_TEXT + ")";
    }
    

    Gruß,
    Björn



  • erstelle die funktion doch als memberfunktion deiner formularklasse!

    // im header
    void __fastcall Aktualisieren();
    
    // im cpp  
    void __fastcall Tfrm_Main::Aktualisieren()
    {
      // ...
    }
    

    aber eher liegt der fehler hier, aber hellsehen kann hier keiner, da musst du schon den code mit hinschreiben!

    frm_Main->txt_KBs->Text=IntToStr(array_WERTE[frm_Main->cbo_INET->ItemIndex][i]);
      frm_Main->txt_KBs->Hint=" Maximale Übertragungsrate (" + str_TEXT + ")";
    


  • Hi,

    erstmal danke für die Antwort. Die Idee mit der Memberfunktion hatte ich auch schon. Mit demselben Ergebnis. Der Fehler kommt sobald das erste mal etwas mit "frm_Main" gemacht wird. Habe testweise mal die Funktion so geändert:

    void __fastcall Tfrm_Main::Aktualisieren()
    {
      frm_Main->Caption="Test";
    }
    

    Auch hier erscheint die Fehlermeldung. Muss also irgendwie was grundlegendes sein, denn normalerweise ist das doch kein Problem. Ich krieg das echt nicht hin und verstehe nicht wieso sowas grundlegendes nicht funktioniert.



  • erscheint die meldung nur in Aktualisieren() ???

    eine zugriffsverletzung passiert meist dann, wenn du versuchst auf einen speicherbereich zu zugreifen der nicht dir gehört, d.h. du hast zum beispiel ein array oder ein dynamisch erstelltes steuerelement und greifst darauf zu, bevor es überhaupt erzeugt wurde (mit new z.b.), bzw. wenn es bereits wieder zerstört wurde.



  • Ja, die Meldung erscheint nur in dieser Funktion. Habe das Projekt noch mal neu gemacht (war ja noch nicht weit) und jetzt funktioniert es. Komisch ist allerdings, dass es zu anfang funktioniert hat und erst auf einmal ein Fehler kam. Ich hoffe, dass es nun immer klappt 🙂


Anmelden zum Antworten