hilfe beim erzeugen und löschen von klassen in funktionen



  • Hi,
    kannst du mal pls. die Headerfile zeigen? Hast du die Klasse Gegner innerhalb oder außerhalb von Form1 definiert?

    MfG

    Alexander Sulfrian



  • so ises in der headerdatei drin 😕
    muss ich evtl die funktion da rein ne oder???

    //---------------------------------------------------------------------------
    
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// Von der IDE verwaltete Komponenten
            void __fastcall FormActivate(TObject *Sender);
    private:	// Anwender-Deklarationen
    public:		// Anwender-Deklarationen
            __fastcall TForm1(TComponent* Owner);
            class Lebewesen
            {
            };
    
            class Gegner:public Lebewesen
            {
            int tregheit;
            int schritte;
            public:
            int posx;
            int posy;
            };
           Gegner *feind[];
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    


  • Hallo

    entweder verlagerst du die Deklaration von Lebewesen und Gegner aus TForm1, oder du nimmst auch gegnererschaffen(int z) als Member von TForm1 auf.

    bis bald
    akari



  • Das wäre eine Möglichkeit. Die Andere ist die Erzeugung dahin zu ändern

    Form1->feind[cnt] = new TForm1::Gegner;
    


  • oh danke nun gehts soweit 😃

    hab mich für die sache mit der anderen erzeugung entscheiden.

    kann mir jemand sagen wie ich da dann drauf zugreifen kann???

    for(int cnt = 0; cnt < z; cnt++)          
       {
       Form1->feind[cnt].tregheit = 2;
       }
    

    oder muss ich das nun auch anders angehen?

    [C++ Fehler] levellaufen.cpp(183): E2294 Auf linker Seite der Struktur ist . oder . erforderlich.*



  • Hallo

    da du die Instanzen per Pointer ansprichst, must du

    Form1->feind[cnt]->tregheit = 2;
    

    schreiben.

    bis bald
    akari



  • danke geht auch=)

    nachdem ich nun aber über

    for(int cnt = 0; cnt < z; cnt++)
       {
       Form1->feind[cnt]->tregheit = 2;
       }
    

    daten zugewiesen hab gibts ne fehlermeldung wenn ich mein programm schliese dann schriebt der irgendwas raus von wegen

    "Im projekt xyz xyz.exe ist eine Exception der klasse EAccessViolation aufgetreten. Meldung: 'zugriffsverletzung bei Adresse 00000017 lesen von adresse 00000017' prozeß wurde angehalten. mit einzelne anweisung oder start fortsetzen"

    habs versucht indem ich zuvor alles wieder löschen lass also mit

    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
    for(int cnt = 0; cnt < monsterzahl; cnt++)
       {
       delete Form1->feind[cnt];
       }
    }
    

    aber geht immernoch net 😕



  • Hallo

    Versuch mal
    [cpp]TForm1::FormDestroy(TObject *Sender)
    {
    ...
    delete feind[cnt];
    [/cpp]
    Lass in Methoden von Formen immer dem Formennamen weg!

    bis bald
    akari



  • ok danke werds mir merken aber geht immernoch net 😕
    fehler bleibt:/



  • ok habs schon gefunden muste im header in der '[]' klammer nen wert eintragen dann gehts;)


Anmelden zum Antworten