![]() |
Zugrifsverletzung - OOP Array
Hallo!
Also, ich habe zwei Class-Objekte geschrieben: TDaten und THaus. TDaten wird erfolgreich erzeugt. TDaten enthält ein array of THaus; THaus wird so erzeugt:
Delphi-Quellcode:
Nun soll ein bei einem Haus die Eigenschaft Besitzer auf 0 geändert werden:
i:=StrToInt(a);
i2:=StrToInt(a2); b1:=length(Daten.Haus); setlength(Daten.Haus,b1+2); Daten.Haus[b1+1]:=THaus.Create; Daten.Haus[b1+1].ypos:=StrToInt(a); Daten.Haus[b1+1].xpos:=StrToInt(a2); Daten.Haus[b1+1].Typ:=Form2.ComboBox1.Text; Daten.Haus[b1+1].Besitzer:=Form2.RadioGroup3.ItemIndex+1;
Delphi-Quellcode:
Führe ich jetzt die Prozedur Gebaeudeloeschen aus, so bekomme ich eine Zugriffsverletzung und die Zeile oben wird markiert.
procedure TForm1.Gebauedeloeschen(Name:String);
var Name2:String; Zahl1,i:Integer; begin try Name2:=Name; delete(Name2,5,length(name2)); if Name2='Haus' then begin Daten.Objekt:=GLDummyCube1.FindChild(Name,true) as TGLFreeForm; Daten.Objekt.Destroy; Name2:=Name; delete(Name2,1,4); Zahl1:=StrToInt(Name2); showmessage(IntToStr(Daten.haus[i].Besitzer)); //Hier wird markiert!! Daten.Haus[i-1].Besitzer:=0; end; except end; end; Ich habe es mit einem Haus ausprobiert. Daten.Objekt.Destray funktioniert tadellos. Wenn ich mir anzeigen lasse, wie groß Daten.Haus (also mit schowmessage(IntToStr(length(Daten.Haus))) ) bekomme ich als Ergebnis 2. Kann mir jemand helfen? PS: Ich benutze GLScene |
Re: Zugrifsverletzung - OOP Array
Nimm statt einem Array lieber eine TObjectList!
Das ist viiiiieeeeel einfacher.. Dadruch entstehen dann fast keine fehler mehr und ein riesen Verwaltungsaufwand verschwindet.! |
Re: Zugrifsverletzung - OOP Array
Cool!
Was ist denn ne TOBjekt List genau, und wie wende ich die an? PS: Mein THaus sieht bisher so aus:
Delphi-Quellcode:
THaus=class
Typ:String; xpos:Integer; ypos:Integer; Besitzer:Byte; public private end; |
Re: Zugrifsverletzung - OOP Array
Zitat:
![]() ObjectList per Create erzeugen (und später das freigeben nicht vergessen), und dann einfach per Add Objekte hinzufügen. ;) |
Re: Zugrifsverletzung - OOP Array
Kann mir bitte Jemand ein Beispiel mit meinem THaus geben? Danke!!!
Wenn ich Add(THaus) anwende, funzt es nicht. |
Re: Zugrifsverletzung - OOP Array
Du darfst auch nicht die Klasse "THaus" per Add() hinzufügen, sondern eine Instanz der Klasse THaus, die Du mit THaus.Create o.Ä. erzeugt hast.
mfG mirage228 |
Re: Zugrifsverletzung - OOP Array
Ok, jetzt funktionierts.
Ich hab jetzt Haus1:=THaus.Create angewedet und per ADD hinzugefügt. Wie kann ich jetzt den Wert von Besitzer ändern? (z.B. bei Item 0, was ja das erste ist) Edit: Habs Raus!
Delphi-Quellcode:
Haus2:=TObjectList.Create;
Haus1:=THaus.Create; Haus0:=THaus.Create; Haus2.Add(Haus1); Haus1:=Haus2.Items[0] as THaus; Haus1.Besitzer:=9; Haus2.Items[0]:=Haus1 as THAus; |
Re: Zugrifsverletzung - OOP Array
Oder einfach
Delphi-Quellcode:
oder noch einfacher:
THaus(Haus2.Items[0]).Besitzer := 9;
![]() |
Re: Zugrifsverletzung - OOP Array
Super!
Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:24 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 by Thomas Breitkreuz