![]() |
einen Record-Array aus anderer Unit benutzen
Hallo Leute,
habe vor 2 jahren mal mehr schlecht als recht Delphi 5 gelernt und versuche nun nach eineiger Zeit Pause wieder einzusteigen. Ich habe das Problem, dass ich einen applikationsfehler bekomme, ich aber nicht verstehe warum. Hier der Quellcode: __________________________________________________ _____ Unit Eingabemodul; interface uses {Standart-units}, Rasse, Basis, Kultur, Profes; Type TForm1 = class(TForm) {Die ganze Form halt} procedure Beenden1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Formactivate(Sender: TObject); PRIVATE {private-Daklarationen} PUBLIC {public-Deklarationen} end; Rassen = TRasse; var Form1 : TForm1; Rassena : ARRAY OF Rassen; i : INTEGER; implementation {$R *.dfm} procedure TForm1.Formactivate(Sender: TObject); begin i := 1; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; procedure TForm1.Button1Click(Sender: TObject); begin Rassena[i].Name := Edit1.Text; {--> Dort passiert der Fehler!} Rassena[i].Modi.Lep := STRTOINT(Edit2.Text); Rassena[i].Modi.Aup := STRTOINT(Edit3.Text); Rassena[i].Modi.Asp := STRTOINT(Edit4.Text); Rassena[i].Modi.MR := STRTOINT(Edit5.Text); Rassena[i].Gross.Min := STRTOINT(Edit6.Text); Rassena[i].Gross.Zahl := STRTOINT(Edit7.Text); Rassena[i].Gross.Wuerfel := STRTOINT(Edit8.Text); Rassena[i].Alter.Min := STRTOINT(Edit9.Text); Rassena[i].Alter.Zahl := STRTOINT(Edit10.Text); Rassena[i].Alter.Wuerfel := STRTOINT(Edit11.Text); Listbox1.Items.Add(Rassena[i].Name); INC(i); end; end. __________________________________________________ ____ Das war die eine Unit, jetzt folgt die andere __________________________________________________ ___ unit Rasse; interface uses Basis, Kultur, Profes; Type TGross = RECORD Min : INTEGER; Zahl: INTEGER; Wuerfel: INTEGER; end; TAlter = RECORD Min : INTEGER; Zahl: INTEGER; Wuerfel : INTEGER; end; TRasse = RECORD Name : STRING; Modi : TModi; {--> ist in Unit Basis deklariert} Gross : TGross; Alter : TAlter; SFS : ARRAY OF TSF; {--> ist in Unit Basis deklariert} Talent : TTalent; {--> ist in Unit Basis deklariert} EKultu : ARRAY OF TKultur; {--> ist in Unit Basis deklariert} MKultu : ARRAY OF TKultur; {--> ist in Unit Basis deklariert} end; implementation end. __________________________________________________ __________________ Ich denke es ist ein simpler Verknüpfungsfehler zwischen den Unit, den Kompilieren tu er ja. Vielleicht muss ich TRasse irgendwie public setzen?? Ich finde den Fehler einfach nicht. Schon mal Danke an alle |
Re: einen Record-Array aus anderer Unit benutzen
HI und herzlich willkommen in der DP :dp: :dp:
Zu Aller-erst: Es gibt Delphi-Tags für Delphi-Code, also bitte auch nutzen. Sonst wird es unübersichtlich. 2. gibt es irgendwelche Fehler bezüglich Syntak/Compilieren? Wenn nein, sollte eigentlich alles gehen 3. hast du dein Array gar nicht initialisiert. Es hat die Länge 0 also hat es keine Wertepaare. Du kannst also auch nix reinschreiben. Lösung: Array mit SetLength() eine Länge/Größe geben oder ein statisches Array definieren. Bernhard |
Re: einen Record-Array aus anderer Unit benutzen
kann ich also einen dynamischen Array in so einem Fall nicht benutzen? wenn nich, warum nicht?
Bei Copilieren gibt es keine Fehlermeldung. Schuldigung, wusste nicht dass es dafür ne spezielle Rubrik gibt. und Danke für die schnelle Antwort |
Re: einen Record-Array aus anderer Unit benutzen
Ein dynamisches Array hat erstmal eine Länge von 0 und bevor man da was reinmachen kann, muß man den nötigen Speicher reservieren.
Wenn man das nicht macht, dann greift man praktisch auf nicht existierenden Speicher zu und es knallt. Außerdem hätte die "genaue" Fehlermeldung sehr geholfen, denn darauf erkannt man recht leicht, daß kein Speicher reserviert wurde. (Zugriffsverletzung bei Adresse $000000xx ... denn 0 = nil) ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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