![]() |
TList ... eine andere Welt
hi an alle euch da :-D
Ich habe ein paar kleine Problemchen mit der TList. Hier erstmal der Code:
Delphi-Quellcode:
Das 1. EAccessViolent hat zwar nichts direkt mit der TList zu tun, aber ich weiß trotzdem nicht warum dort eine Exception kommt.
type
THanoiList = class private wClusterSize : Word; oCluster : TList; procedure AddCluster; public constructor Create(awClusterSize : Word); ... end; implementation constructor THanoiList.Create(awClusterSize : Word); begin wClusterSize := awClusterSize; // 1. EAccessViolent AddCluster; end; procedure THanoiList.AddCluster; var pNew : Pointer; begin oCluster := TList.Create; // 2. EAccessViolent GetMem(pNew, wClusterSize); oCluster.Add(pNew); end; end. Beim 2. EAccessViolent liegt es irgendwie am oCluster, weil wenn ich oCluster dorekt in AddCluster deklariere, funktioniert es. Ich hoffe ihr könnt mir helfen. Wusel |
Re: TList ... eine andere Welt
Also, ich kann dein Problem leider nicht nachvollziehen. Wenn ich deinen Code in ein neues Projekt einfüge und dann ein Object dieser Klasse erstelle, funktioniert alles ohne Fehler.
|
Re: TList ... eine andere Welt
Da fehlt eine Zeile, das kann gar nicht funktionieren, da Self nie initialisiert wird.
Code:
...:cat:...
[...]
constructor THanoiList.Create(awClusterSize : Word); begin [color=#ff0000]inherited Create;[/color] wClusterSize := awClusterSize; // 1. EAccessViolent AddCluster; end; [...] |
Re: TList ... eine andere Welt
Thx sakura :thuimb:
jedoch gings dann immernoch nicht und ich hab ein bisschen rumprobiert. Da bin ich dazu gekommen, dass wenn ich
Delphi-Quellcode:
benutze, es nicht funktioniert. Aber wenn ich
Var
oHanoiList : THanoiList; begin oHanoiList.Create(1024) end;
Delphi-Quellcode:
benutze funktioniert es.
begin
THanoiList.Create(1024) end; Weiß einer warum? Wenn nicht, ist es auch nicht so schlimm da es ja jetzt erstmal fuktioniert :) |
Re: TList ... eine andere Welt
Wenn du oHanoiList.Create aufrufst, rufst die die Methode Create des Objekts oHanoiList auf. Allerdings existiert dieses Objekt in diesem Moment noch nicht! Deshalb musst du den Konstruktor als Methode der Klasse aufrufen, dein Objekt wird dann erstellt und zurückgegeben.
|
Re: TList ... eine andere Welt
Zitat:
oHanoiList ist eine Variable, in die Du ein THanoiList stecken kannst. THanoiList ist demnach die Klasse. oHanoiList ist am Anfang nicht initialisiert (eine leere Variable). Du kannst also gar nicht auf der Variablen arbeiten. Mit
Code:
weist Du der Variablen ein konkretes Objekt (Aufruf des Konstruktors der Klasse) zu.
oHanoiList := THanoiList.Create(1024);
Wenn Du
Code:
einfach so aufrufst, erzeugst Du im übrigen eine Instanz des Objektes, die 'leer' im Raum herumhängt. Du hast dann keine Referenz (sprich: Variable), die auf dieses Objekt zeigt, und so kommst Du später nicht mehr an das Objekt heran.
THanoiList.Create(1024);
|
Re: TList ... eine andere Welt
Anwenden kannst (musst) du es dann so:
Delphi-Quellcode:
Edit: Mist, immer dasselbe mit den schnelleren :-)
Var
oHanoiList : THanoiList; begin oHanoiList := THanoiList.Create(1024); end; |
Re: TList ... eine andere Welt
Achso
Ok dann danke an euch alle :) Habt mir echt geholfen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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