Zitat von
Cöster:
Zitat von
Muetze1:
1. Entweder einfach im Implementation Teil deklararieren.
Hört sich schonmal gut an, krieg ich aber irgendwie nicht richtig gebacken. Ich hab die Deklaration von TNode einfach unter "implementation" verschoben und noch type davor geschrieben. Dann fängt's allerdings schon damit an, dass TNode (was der Typ einiger Attribute TFIFOs ist) ein undefinierter Bezeichner ist. Zahlreiche weitere Fehlermeldungen folgen.
Das ist klar. Von daher musst du es bei diesem Weg eh so umschreiben, dass TNode nur intern genutzt wird und nur in der Implementation entsprechend ge-typecasted wird.
Zitat von
Cöster:
Zitat von
Muetze1:
2. Oder als private Sub-Klasse definieren
TNode von TFIFO ableiten? Und dann? Den Typen TNode muss ich bereits in TFIFO verwenden können, da er wie gesagt Typ einiger Attribute dort ist.
Was genau ist eine
private Subklasse?
Ich habe nix von ableiten geschrieben.
Delphi-Quellcode:
unit FIFO;
interface
type
TFIFO =
class
private
Type
TNode =
class
private
FNext: TNode;
FObject: TObject;
public
constructor Create(AObject: TObject);
destructor Destroy;
override;
end;
private
FFront: TNode;
FRear: TNode;
public
constructor Create;
destructor Destroy;
override;
procedure Clear;
function Dequeue: TObject;
procedure Enqueue(AObject: TObject);
end;
implementation
constructor TNode.Create(AObject: TObject);
begin
inherited Create;
FObject := AObject;
FNext :=
nil;
end;
destructor TNode.Destroy;
begin
FObject.Free;
inherited;
end;
constructor TFIFO.Create;
begin
inherited;
FFront :=
nil;
FRear :=
nil;
end;
destructor TFIFO.Destroy;
begin
Clear;
inherited;
end;
procedure TFIFO.Clear;
begin
while FFront <>
nil do
Dequeue.Free;
end;
function TFIFO.Dequeue;
begin
if FFront <>
nil then
begin
Result := FFront.FObject;
FFront := FFront.FNext;
end
else
Result :=
nil;
end;
procedure TFIFO.Enqueue(AObject: TObject);
begin
if FRear <>
nil then
begin
FRear.FNext := TNode.Create(AObject);
FRear := FRear.FNext;
end
else
begin
FRear := TNode.Create(AObject);
FFront := FRear;
end;
end;
end.
/EDIT: Programmierst du wirklich mit TABs? Das gehört meiner Meinung nach verboten...
/EDIT2: Den Constructor und Desctructor kannst du nicht einfach in eine geringere Sichtbarkeit verschieben...