AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TList ... eine andere Welt

Ein Thema von Wusel · begonnen am 13. Jan 2004 · letzter Beitrag vom 14. Jan 2004
Antwort Antwort
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#1

TList ... eine andere Welt

  Alt 13. Jan 2004, 21:44
hi an alle euch da
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: TList ... eine andere Welt

  Alt 13. Jan 2004, 22:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: TList ... eine andere Welt

  Alt 13. Jan 2004, 22:52
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;

[...]
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#4

Re: TList ... eine andere Welt

  Alt 14. Jan 2004, 13:52
Thx sakura
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
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TList ... eine andere Welt

  Alt 14. Jan 2004, 14:02
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

Re: TList ... eine andere Welt

  Alt 14. Jan 2004, 14:06
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#7

Re: TList ... eine andere Welt

  Alt 14. Jan 2004, 14:08
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
  Mit Zitat antworten Zitat
Benutzerbild von Wusel
Wusel

Registriert seit: 27. Sep 2003
Ort: Riesa
54 Beiträge
 
Delphi 6 Personal
 
#8

Re: TList ... eine andere Welt

  Alt 14. Jan 2004, 14:22
Achso

Ok dann danke an euch alle Habt mir echt geholfen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 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