dynamische klassen???
-
Den Konstruktor kannst du hier getrost weglassen. Weiterhin ist
einheit nr[5]; natürlich auch möglich. Bei dynamischen Feldern könnte man auch
std::vector<einheit> nr; oder so verwenden. Es gibt viele Möglichkeiten. Auf new und delete würde ich bei Anfängern erst mal verzichten.
-
wie kann ich des nun machen das ich die lösungsmöglichkeit nr 3 als element von form1 erstellen kann also vonem 2. form mit Form1->nr[1]. ...
zugreifen aknn
-
Hallo
über die FAQ im Abschnitt Forms findest du zum Thema Variablenübergabe an anderes Form dieses Thread
http://www.c-plusplus.net/forum/viewtopic.php?t=39242bis bald
akari
-
ja aber was davon muss ich nun in die headerdatei schreiben und was in die cpp???weisl der in der headerdatei z.b. des conast int.. udn so net annimmt.?
abber wenn ichs in die cpp schrieb kann ich die net in der :h erzeugen odeR??const Zahl 50; class einheit { int lebenspunkte; String Name; einheit() {}; // Konstruktor }; einheit *nr3[Zahl]; // Feld mit dynamischen Objekten for (int Lv = 0; Lv < Zahl; Lv++) // Dynamische Objekte erstellen nr3[Lv] = new einheit();die ganze zeit wies noch nicht dynamisch was hatte ich alles in der headerdatei drin
class einheit { int lebenspunkte; String Name; einheit() {}; // Konstruktor }; einheit nr31; einheit nr32; einheit nr33; ...
-
versuch mal in .h
DynamicArray <einheit*>EinheitNr;in der .cpp
for (int x = 0; x< AnzahlEinheiten;x++) { EinheitNr.Length++; EinheitNr[x] = new einheit(); }aber natürlich beim schliessen des programms/ der form
for (int x = AnzahlEinheiten; x >0 ;x--) { delete EinheitNr[x]; EinheitNr.Length--; }ist ungetestet.. hoffe mal es funktioniert und ich habe richtig verstanden was du willst..

-
geht leider auch net

zeigt dann nur ne fehlermeldung:
*[C++ Fehler] Unit1.cpp(20): E2285 Keine Übereinstimmung für 'TForm1::einheit::einheit(TForm1 )' gefunden
-
Da stimmen wohl Definition und Deklaration des Konstruktors deiner Klasse einheit nicht überein.
Wenn die hier gezeigte Deklaration vollständig ist, kannst den Konstruktor von Einheit weglassen (wie oben schon gesagt).
Warum willst du die Instanzen von einheit unbedingt dynamisch verwalten (sprich Pointer davon)? Auch das ist nicht unbedingt nötig.
folgendes sollte auch reichenDynamicArray <einheit> EinheitNr; EinheitNr.Length = AnzahlEinheiten;Dann brauchst du auch kein delete.
Wenn die Anzahl der Einheiten sich später nicht ändert, reicht auch ein statisches Array.
-
würde das ganze schon gerne so in etwa angehen da dann der zugriff auf die einzelnen objekte leichter ist
const int Zahl=50; class einheit { int lebenspunkte; String Name; einheit() {}; // Konstruktor }; einheit *nr3[Zahl]; // Feld mit dynamischen Objekten for (int Lv = 0; Lv < Zahl; Lv++) // Dynamische Objekte erstellen nr3[Lv] = new einheit();doch selbst hier bringt der schon folgenden fehler raus:
**
[C++ Fehler] Unit1.cpp(32): E2247 Zugriff auf 'einheit::einheit()' nicht möglich**wie kann ich den fehler beheben?
und mm was muss ich tun um aus dem ganzen ein element von form1 zu machen ?
einfch beim ertellen:nr3[Lv] = new einheit(Form1);machen????
-
Wiso ist dann der Zugriff auf die Elemente leichter?
Wie gesagt lass den Konstruktor weg. Wenn du unbedingt dynamisch erstellen willst reicht dochfor (int Lv = 0; Lv < Zahl; Lv++) // Dynamische Objekte erstellen nr3[Lv] = new einheit;völlig aus.
Wenn das hier
einheit *nr3[Zahl];
im Header Unit1.h im public-Bereich von TForm1 deklariert ist, dann ist deine Variable nr3 doch schon ein Teil von TForm1.
Lies die bitte noch mal den anfangs angegebenen FAQ-Beitrag durch.
Desweiteren vielleicht auch den http://www.c-plusplus.net/forum/viewtopic.php?t=39302
Vielleicht solltest du lieber dein Design etwas ändern.
-
einheit.h
class einheit { private: int lebenspunkte; String Name; public: einheit() {}; // Konstruktor ~einheit() {}; void set_lebenspunkte (int lbp) { lebenspunkte=lbp; } void set_Name(String nm) { Name=nm; } int get_lebenspunkte() { return lebenspunkte; } String get_Name() { return Name; } };Unit1.h
//--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "einheit.h" //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; private: // Anwender-Deklarationen public: // Anwender-Deklarationen einheit *nr3; __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endifUnit1.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { nr3=new einheit[10]; for(int i=0;i<10;i++) nr3[i].set_lebenspunkte(i); delete nr3; } //---------------------------------------------------------------------------
-
Wenn schon delete dann richtig.
delete[] nr3;
-
Okay Okay ....

-
danke leute nun futzts;)
