Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TList ... eine andere Welt (https://www.delphipraxis.net/14678-tlist-eine-andere-welt.html)

Wusel 13. Jan 2004 21:44


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:
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.
Das 1. EAccessViolent hat zwar nichts direkt mit der TList zu tun, aber ich weiß trotzdem nicht warum dort eine Exception kommt.
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

scp 13. Jan 2004 22:37

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.

sakura 13. Jan 2004 22:52

Re: TList ... eine andere Welt
 
Da fehlt eine Zeile, das kann gar nicht funktionieren, da Self nie initialisiert wird.

Code:
[...]

constructor THanoiList.Create(awClusterSize : Word);
begin
  [color=#ff0000]inherited Create;[/color]
  wClusterSize := awClusterSize; // 1. EAccessViolent
  AddCluster;
end;

[...]
...:cat:...

Wusel 14. Jan 2004 13:52

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:
Var
  oHanoiList : THanoiList;
begin
  oHanoiList.Create(1024)
end;
benutze, es nicht funktioniert. Aber wenn ich
Delphi-Quellcode:
begin
  THanoiList.Create(1024)
end;
benutze funktioniert es.

Weiß einer warum?
Wenn nicht, ist es auch nicht so schlimm da es ja jetzt erstmal fuktioniert :)

Chewie 14. Jan 2004 14:02

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.

Phoenix 14. Jan 2004 14:06

Re: TList ... eine andere Welt
 
Zitat:

Zitat von Wusel
...wenn ich
Delphi-Quellcode:
Var
  oHanoiList : THanoiList;
begin
  oHanoiList.Create(1024)
end;
benutze, es nicht funktioniert. Weiß einer warum?

Ja:
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:
oHanoiList := THanoiList.Create(1024);
weist Du der Variablen ein konkretes Objekt (Aufruf des Konstruktors der Klasse) zu.

Wenn Du
Code:
THanoiList.Create(1024);
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.

scp 14. Jan 2004 14:08

Re: TList ... eine andere Welt
 
Anwenden kannst (musst) du es dann so:

Delphi-Quellcode:
Var
  oHanoiList : THanoiList;
begin
  oHanoiList := THanoiList.Create(1024);
end;
Edit: Mist, immer dasselbe mit den schnelleren :-)

Wusel 14. Jan 2004 14:22

Re: TList ... eine andere Welt
 
Achso

Ok dann danke an euch alle :) Habt mir echt geholfen


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz