Dein ^TWareListItem solltest du umstellen.
Code:
[b]type[/b]
PWareListItem = ^TWareListItem;
TWareListItem = [b]object[/b]
[b]constructor[/b] Create(next: [u]PWareListItem[/u]);
...
In Turbo/Borland Pascal gibt es noch die statischen Objekte, die keine Zeiger sind. Du kannst z.B. ein Objekt so nutzen:
Code:
[b]var[/b]
MyObj: TWareListItem;
[b]begin[/b]
MyObj.Create(nil);
...
MyObj.Destroy;
[b]end[/b];
Mit dieser Weise fällt man aber schnell auf die Nase, wenn es um die Übergabe an Funktionen geht, da man es von Delphi gewohnt ist, dass ein Zeiger auf das Objekt übergeben wird, wobei hier eben kein Zeiger, sondern eine Kopie des gesamten Objekts übergeben wird.
Wenn du es aber so wie Delphi es macht haben willst dann geht das so:
Code:
[b]var[/b] MyObj: PWareListItem;
[b]begin[/b]
MyObj := New(TWareListItem, Create(nil) );
...
Dispose(MyObj, Destroy);
[b]end[/b];
Wenn du eine Free-Methode habe möchtest dann ist es notwendig, den Destruktor virtuell zu machen. Die Free-Methode darf auch nicht auf statische Objekt angewand werden, da diese nicht mit New() erzeugt wurden.
Code:
PObject = ^TObject;
TObject = [b]object[/b]
[b]destructor[/b] Destroy; [b]virtual[/b];
[b]procedure[/b] Free;
[b]end[/b];
[b]destructor[/b] TObject.Destroy;
[b]begin[/b]
[b]end[/b];
[b]procedure[/b] TObject.Free;
[b]var[/b] p: PObject;
[b]begin[/b]
p := PObject(Self);
Dispose(p, Destroy);
[b]end[/b];