![]() |
anfänger: stack als klasse erstellen
hallo,
ich möchte mir zu lernzwecken einen stack als klasse erstellen. habe mir zur oop deshalb auch schon ein tutorial durchgelesen. habe bis jetzt folgendes:
Delphi-Quellcode:
bekomme sofort einen compilerfehler:
type
Tmystack = class procedure create; procedure pop; procedure push(str : string); function firstItem: string; end; [Fehler] Unit1.pas(19): E2065 Ungenügende Forward- oder External-Deklaration: 'Tmystack.create' für jede der proceduren. wäre nett wenn mir einer weiterhelfen könnte gruß nkaaa |
Re: anfänger: stack als klasse
Du mußt die Methoden implementieren (zumindest als stubs).
|
Re: anfänger: stack als klasse
danke, funktioniert :spin2:
|
Re: anfänger: stack als klasse
Create würde ich allerdings als Konstruktor deklarieren, und nicht als normale Prozedur.
Delphi-Quellcode:
constructor Create;
|
Re: anfänger: stack als klasse
Und Pop würde ich als function deklarieren, denn irgendwem musst du ja den Wert zuweisen, den du vom Stack holst ;)
|
Re: anfänger: stack als klasse
dazu war eigentlich
Delphi-Quellcode:
gedacht :wink:
function firstItem: string;
also erst angucken was draufliegt und dann eventuell mit pop runterschmeissen. |
Re: anfänger: stack als klasse
naja... wenn du nix aufm stack hast eben ne exception werfen ^^
ansonsten ist es so, dass "pop" ein anerkanntes "signalwort" ist. bei firstitem würd ich eher vermuten, dass ich da zugreifen kann, ohne dass er was runterschmeißt. |
Re: anfänger: stack als klasse
ich glaub du hast mich falsch verstanden.
die function firstitem liefert das element zurück, was ich zuletzt auf den stack gepackt habe; danach entscheide ich mich dann, ob ich das element wirklich runterschmeissen will (mit pop). pop schmeisst hier wirklich nur das element vom stack, ohne irgendetwas zurückzugeben. Zitat:
|
Re: anfänger: stack als klasse
Zwei Sachen fallen mir auf:
1. Pop ist normalerweise eine Funktion, die das oberste Element löscht und den Inhalt zurückgibt. 2. Die Funktion, die du firstItem nennst, bezeichnet man normalerweise als Peek. Ist eigentlich egal, aber so habe zumindest ich es gelernt. |
Re: anfänger: stack als klasse erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
so hab ein bisschen weitergearbeitet:
Delphi-Quellcode:
anbei noch meine kleine testumgebung.
type
Tzeiger = ^Tinfo; Tinfo = Record info : String; next : Tzeiger; End; Tstack = class(Tobject) constructor create; procedure pop; //Element vom Stack runterschmiessen, OHNE es zurückzuliefern! procedure push(info : String); //Element draufpacken function empty : Boolean; //Ist der Stack leer? function GetFirstItem : String; //Liefert das erste Element vom Stack zurück destructor destroy; private var first : Tzeiger; //Zeiger auf das erste Element im STack end; implementation constructor Tstack.create(); begin inherited; new(stack.first); first:=nil; end; procedure Tstack.pop; var help : Tzeiger; begin if not (first = nil) then begin help:=first; first:=first^.next; dispose(help); end; end; procedure Tstack.push(info : String); var help : Tzeiger; begin new(help); help^.info:=info; help^.next:=nil; if (first=nil) then first^:=help^ else begin help.next:=first; first:=help; end; end; function Tstack.empty : Boolean; begin result:=(First=nil); end; function Tstack.GetFirstItem : String; begin if not (first=nil) then result:=first^.info else result:='Kein Element im Stack'; end; destructor Tstack.destroy; begin inherited; end; procedure TForm1.Button3Click(Sender: TObject); begin stack.create; end; bekomme im testprogramm sofort beim Stack.create eine zugriffsverletzung :/ die Fehlermeldung kommt selbst dann noch, wenn ich das
Delphi-Quellcode:
ausklammere.
new(stack.first);
wer weiß rat? :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:43 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