TThread und "Standardkonstruktor" (war: Threads mit Boland C++ Builder 5)



  • Moin moin,

    ich habe ein Problem mit Threads beim Borland C++ Builder 5. Ich habe versucht es genau nach der Hilfe zu realisieren. Aber wenn ich versuche das Projekt zu compelieren, kommt folgende Fehlermeldung:

    [C++ Fehler] Programmoberflaeche.cpp(28): E2125 Compiler konnte Standardkonstruktor nicht für die Klasse 'TMyThread' generieren.

    beim ausführen des Threads mit folgendem Befehl:

    TMyThread *Process = new TMyThread(false);
    

    Leider habe ich keine Ahnung wie ich diesen Fehler beseitigen kann. 😞 Kann mir jemand weiterhelfen?

    Hier noch meine cpp-Datei für den thread:

    //---------------------------------------------------------------------------
    #include <clx.h>
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Serial.h"
    #include "EndschalterThread.h"
    #include "Programmoberflaeche.h"
    
    #pragma package(smart_init)
    //---------------------------------------------------------------------------
    
    //   Wichtig: Methoden und Eigenschaften von Objekten der VCL können nur in
    //   in Methoden verwendet werden, die Synchronize aufrufen, z.B.:
    //
    //      Synchronize(UpdateCaption);
    //
    //   wobei UpdateCaption so aussehen könnte:
    //
    //      void __fastcall EndschalterThread.h::UpdateCaption()
    //      {
    //        Form1->Caption = "In Thread aktualisiert";
    //      }
    //---------------------------------------------------------------------------
    
    __fastcall TMyThread::TMyThread(bool CreateSuspended):TThread(CreateSuspended){
    Priority = tpNormal;
    }
    //---------------------------------------------------------------------------
    void __fastcall TMyThread::Execute(){
      EndschalterAufruf();
    }
    //---------------------------------------------------------------------------
    void __fastcall TMyThread::EndschalterAufruf(){
     port1->Endschalter;
    }
    

    und die dazugehörige Headerdatei:

    //---------------------------------------------------------------------------
    
    #ifndef EndschalterThreadH
    #define EndschalterThreadH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    //---------------------------------------------------------------------------
    class TMyThread : public TThread{
    private:
    protected:
            void __fastcall Execute();
            void __fastcall EndschalterAufruf();
    public:
            __fastcall Endschalter(bool CreateSuspended);
    };
    //---------------------------------------------------------------------------
    #endif
    

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Sieh dir die Erläuterungen und Beispiele in der Hilfe nochmal genau an.
    Wie kommst du im Header auf einmal auf Endschalter? Mit dem Namen deiner Klasse hast das irgendwie nix zu tun, oder?



  • Frage mal am rande, programmierst Du mit BCB oder mit Kylix ?

    Du hast sowohl die clx für kylix als auch die vcl für bcb eingebunden. das macht wenig sinn!?!

    Desweiteren achte auf den Hinweistext über deinen Thread

    //   Wichtig: Methoden und Eigenschaften von Objekten der VCL können nur in
    //   in Methoden verwendet werden, die Synchronize aufrufen, z.B.:
    //
    //      Synchronize(UpdateCaption);
    

    Der besagt, dass Du deine Funktion über

    Synchronize

    aufrufen sollst 😉

    dein attribut port1; liegt in welcher header-datei ?
    wenn es auf deiner mainform Programmoberflaeche.h liegt, dann solltest du es wie folgt ansprechen.

    form1->port1->funktion()

    Viel erfolg !

    Gruß
    xforce



  • Ich Schussel. Ich hatte die Klasse einmal umbennant, und den Konstruktor vergessen.... Da habe ich den Wald vor lauter Bäumen nicht mehr gesehen. 🙂

    Sei gedankt Jansen, jetzt ist der Fehler behoben.


Anmelden zum Antworten