![]() |
eigene Klasse als array
Also, ich habe ein Problem.
Erstens will ich eine eigene Klasse haben. Diese soll z.B. Einheit.Name, Einheit.Kosten enthalten. Diese Einheiten will ich dann in einem Array anordnen, sodass ich mit einem Integer wert auf eine bestimmte Einheit aus dem Array zugreifen kann. Außerdem soll dass array später in einer Listbox angezeigt werden. Ich hab im Moment keine Ahnung wie ich ein eigenes array von meiner Klasse hinbekomme. (bin ein wenig aus der Übung und hatte ne extrem schlechte Informatiklehrerin) Hoffentlich habe ich wenigstens an der richtigen STelle gepostet und nichts schwachsinniges geschrieben^^. Es wäre super wenn ich ein paar Codeansätze und Erklärungen von euch bekommen könnte. |
AW: eigene Klasse als array
Versuche, ein Array als Klassenvariable zu definieren, in dem du die genannten Daten speicherst.
Und gegen das "aus der Übung kommen" gibt es im Delphi-Treff ![]() ![]() Google und die Forensuche hätten dir auch gerne geholfen. |
AW: eigene Klasse als array
Delphi-Quellcode:
type
TMeineKlasse=class {bla bla blupp} {...} end; TMeineKlasseArray=array of TMeineKlasse; var MeineKlassen:TMeineKlasseArray; //Initialisierung des Arrays ganz zu beginn: SetLength(MeineKlassen,0); //Initialisierung eines neuen Array-Elementes: SetLength(MeineKlassen,Length(MeineKlassen)+1); //Array um ein Feld erweitern Meineklassen[High(MeineKlassen)]:=TMeineKlasse.create; //Instanz erzeugen |
AW: eigene Klasse als array
Sollen da einfach nur Daten gespeichert werden?
Wenn ja, warum dann nicht einen Record verwenden? |
AW: eigene Klasse als array
Erstmal vielen Dank für die Antwort,
allerdings habe ich immer noch Probleme... Ich hab mir die Links mal angeguckt, allerdings hab ich momentan nicht Lust und Zeit alles durchzulesen. Auch nen Stück Code, dass ich übernehem wollte hat nicht ganz funktioniert. Ich komm gerade nicht weiter. Ich schreib mal was ich versucht hab und hoffe, dass ihr mir was schreiben könnt was funktioniert.
Code:
Delphi motzt immer bei der letzten Zeile rum. Was hab ich falsch gemacht und wie gehts richtig. Am liebsten würde ich fertigen code bekommen.type Einheit = class private Name: string; Kosten: Integer; public end; Einheitenliste= array[1..5] of Einheit; ... Einheitenliste[1].Name:='blabla'; (mit Google hatte ich gesucht) |
AW: eigene Klasse als array
Siehe Post #3.
Wenn du Objekte verwenden willst, dann mußt du diese auch erstellen ( .Create ) und am Ende natürlich auch wieder freigeben ( .Free ) . Bei einer Variante mir Records wäre sowas nicht nötig. |
AW: eigene Klasse als array
oho, während ich meine antwort geschrieben habe ist ja ne menge neues gekommen. ich probier erstmal was rum und melde mich falls ich nochmal probleme hab. Nochmal vielen Dank an alle fleißigen Antworter. (Hätte nicht gedacht, dass alles so schnell geht).
|
AW: eigene Klasse als array
Zitat:
PS: Du nutzt wirklich noch Delphi 2? Ich glaub unser DP-Admin hatte noch ein paar Delphi 7 Serials und falls man einen netten Brief an den Embarcadero-Support schreibt, dann könnte man von denen noch einen Turbo Delphi-Serial aka Delphi 2006 bekommen. (Setupdateien gibt's dann von uns) Und abundzu gibt's auch mal was Günstiges bei eBay und Co. oder als Beilage in einigen Delphi-Büchern. |
AW: eigene Klasse als array
Ein neues Problem hat sich aufgetan. Wenn ich auf Start drücke erscheint die Meldung:
Zugriffsverletzung bei Adresse 00403593 in Modul 'Project1.exe' Schreiben von Adresse 00000004 Was zum Teufel heißt das? -- Ich benutzte Delphi 3 unter Vista -- |
AW: eigene Klasse als array
:wall:
Schau dir GENAU Post 3 an. Hast du die Klasse deklariert? Die Variable? Hast du entsprechend .create() und setLenght() gemacht? |
AW: eigene Klasse als array
Code:
kommt das alles in den TForm1.FormCreate Teil?
//Initialisierung des Arrays ganz zu beginn:
SetLength(MeineKlassen,0); //Initialisierung eines neuen Array-Elementes: SetLength(MeineKlassen,Length(MeineKlassen)+1); //Array um ein Feld erweitern Meineklassen[High(MeineKlassen)]:=TMeineKlasse.create; //Instanz erzeugen |
AW: eigene Klasse als array
Oder in jeder anderen procedure, ja ;-)
|
AW: eigene Klasse als array
:wall:
Denk doch mal nach... Der erste Teil kann in OnCreate, initialization oder was auch immer. Der zweite Teil kommt dann dahin, wo du eine Einheit hinzufügen willst. |
AW: eigene Klasse als array
jaja, ist jetzt so halbwegs klar, nur eine Fehlermeldung kommt: Inkompatible Typen: 'String' und 'Einheitenlisten'
dass kommt bei der zeile: SetLength(Einheitenliste1,0); ich hab eigentlich den code aus dem dritten post nachgebaut mit meinen Bezeichnungen. |
AW: eigene Klasse als array
Warum statt einem Array nicht einfach eine ObjectList nehmen?!? Die ist doch genau für so einen Zweck gemacht (oder gabs die bei D2 nicht? Bin erst bei D7+ eingestiegen :) )
SCRaT |
AW: eigene Klasse als array
was weiß ich obs die gibt... ich hab doch keine ahnung, aber ich such mal danach^^
|
AW: eigene Klasse als array
Delphi-Quellcode:
... zumindest so ähnlich :)
MeineObjectList : TObjectList;
[...] MeineObjectList := TObjectList.Create; MeineObjectList.Add(MeineKlasse.Create); { Hier kann man zugreifen } TMeineKlasse(MeineObjectList[0]).Feldname := 'sdfsdf'; { und zum schluß alles freigeben } for i := 0 to MeineObjectList.Count-1 do TMeineKlasse(MeineObjectList[i]).Free; MeineObjectList.Free; |
AW: eigene Klasse als array
Weiß jemand obs das in Delphi 3 gibt? Ich habs gerade ausprobiert und da kam: Undefinierter Bezeichner: TObjectList . Heißt das die Idee mit Objectlist kann ich vergessen oder mir nen neueres Delphi besorgen?
|
AW: eigene Klasse als array
![]() Zitat:
|
AW: eigene Klasse als array
Zitat:
|
AW: eigene Klasse als array
Hmmmm, ich dachte in Delphi 3 gab es noch keine dynamischen Arrays?
(diese sollte es doch erst seit Delphi 4 geben) Das würde dann auch erklären, warum SetLength nicht funktioniert. PS: Darum ja auch der Tipp auf eine etwas "neuere" Delphiversion. Delphi 3 war die zweite Win32-Version, ist inzwischen auch schon 13 Jahre alt und quasi noch auf dem Stand von Windows 95. (vielleicht gibt es ja Ende des Jahres, mit Delphi 2011, endlich wieder eine günstigere oder gar kostenlose Version) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz