Modifizierung eines Objektes in einer Klasse



  • Unglaublich! 🙂 Vielen Dank es geht!
    Aber inwiefern ich einen Konstruktor für TForm1 erstellen soll verstehe ich gerade nicht... 🙄



  • Hallo

    Sorry, ich meinte natürlich Destruktor.

    bis bald
    akari



  • Ich muss leider zugeben, dass ich ebenfalls nicht weiß wie denn ein Destruktor für TForm1 aussehen könnte! 🙄

    Gruß
    Kasimir



  • Kasimir87 schrieb:

    Ich muss leider zugeben, dass ich ebenfalls nicht weiß wie denn ein Destruktor für TForm1 aussehen könnte! 🙄

    Gruß
    Kasimir

    Ich hoffe aber, dass du weißt, was ein Destruktor ist, oder?

    TForm1::~TForm1()()
    {
        delete racerpic;
    }
    

    Ansonsten, solltest du dich dran gewöhnen die Variablennamen in Englisch zu bennenen.

    Gruß



  • jesus was black schrieb:

    TForm1::~TForm1()()
    {
        delete racerpic;
    }
    

    Warst du sehr in Eile ? 😉

    TForm1::~TForm1()
    {
        delete racerpic;
    }
    


  • Also der Destruktor zerstört das Objekt und gibt den Speicher wieder frei, aber in diesem Falle will mein Destruktor einfach nicht... destruktieren...
    Ich bekomme immer die Fehlermeldung "Virtuelle Funktion '~TForm1::TForm1()' verursacht Konflikte mit der Basisklasse 'TForm'".
    Ich habe den Destruktor in den public-bereich der TForm1-Klasse gesetzt und nunja. Irgendwie scheint das nicht ganz richtig so zu sein 😕

    Gruß
    Kasimir



  • Hallo

    Der Destruktor einer VCL-Klasse muß wie der Konstruktor immer als __fastcall deklariert werden.

    bis bald
    akari



  • Nun funktioniert es, allerdings nur wenn ich den speziell erschaffenen racer anspreche und nicht allgemein das racerpic. racerpic ist ja ein Objekt innerhalb der Klasse TRacer und von TRacer gibt es in meinem falle 4 objekte. Hab ich das richtig verstanden, dass der Destruktor für die Racer ist oder tatsächlich für das Bild-Objekt im Racer-Objekt?

    class TForm1 : public TForm
    {
    __published:	// IDE-verwaltete Komponenten
    	TTimer *Timer1;
    	TButton *startbutton;
    	TLabel *Label1;
    	TLabel *geld;
    	TLabel *Label3;
    	TEdit *einsatz;
    	TLabel *statusmeldung;
    	TComboBox *favourit;
    	TImage *strasse;
    	TImage *ziel;
    	TImage *ton;
    	void __fastcall startbuttonClick(TObject *Sender);
    	void __fastcall FormCreate(TObject *Sender);
    	void __fastcall strasseClick(TObject *Sender);
    	void __fastcall favouritChange(TObject *Sender);
    	void __fastcall Timer1Timer(TObject *Sender);
    	void __fastcall tonClick(TObject *Sender);
    private:	// Benutzer Deklarationen
    public:		// Benutzer Deklarationen
    	__fastcall TForm1(TComponent* Owner);
    	__fastcall TForm1::~TForm1()
    	{
    		delete gruener_racer;
    		delete blauer_racer;
    		delete oranger_racer;
    		delete roter_racer;
    	}
    	TRacer *gruener_racer;
    	TRacer *blauer_racer;
    	TRacer *oranger_racer;
    	TRacer *roter_racer;
    };
    

    Ist es überhaupt nötig, dass ich jedes zu zerstörende Objekt benenne oder kann man das irgendwie ausdrücken, dass alle erschaffenen Objekte vom Typ TRacer zerstört werden sollen?

    Gruß
    Kasimir



  • naja du könnest auch im Konstruktor von Form1 folgendes machen:

    #include <memory>       //for STL auto_ptr class
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    static std::auto_ptr<TRacer> _MyRacerCleaner_gruen(gruener_racer = new TRacer);
    static std::auto_ptr<TRacer> _MyRacerCleaner_blau(blau_racer = new TRacer);
    static std::auto_ptr<TRacer> _MyRacerCleaner_orange(orange_racer = new TRacer);
    static std::auto_ptr<TRacer> _MyRacerCleaner_rot(rot_racer = new TRacer);
    }
    

    dann brauchst du gar keinen Destruktor



  • Ah danke, auto_ptr gegoogelt und gleich fündig geworden. Was genau das ist, was ich da denn allerdings mache muss ich mir erstmal erarbeiten 😉

    Vielen Dank für die Hilfe von Euch!

    Gruß
    Kasimir


Anmelden zum Antworten