[Delphi] Mein Lifo funzt net~.~

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von coach, 2. März 2007 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. März 2007
    Mein Lifo funzt net~.~

    hier der code meines lifos, hoffe, jemand kann mir helfen, den fehler zu finden...mfg coach

    TElement:
    Code:
    unit uTElement; //Die 'zwischenklasse für die einzufügenden objekte
    
    interface
    
    type
    
     TElement=class
     protected
     vorgaenger:TElement;
     inhalt:TObject;
     public
     constructor create(i:TObject); //beim creator wird der inhalt direkt miteingebunden
     procedure set_vorgaenger(v:TElement);
     function get_vorgaenger:TElement;
     function get_inhalt:TObject; //liefert ein tobject, weshalb das lifo vielseitigerer wird
     end;
    
    implementation
    
    constructor TElement.create(i:TObject);
    begin
     if i<>nil then
     inhalt:=i;
    end;
    
    procedure TElement.set_vorgaenger(v:TElement);
    begin
     if v<>nil then
     vorgaenger:=v;
    end;
    
    function TELement.get_vorgaenger:TElement;
    begin
     if vorgaenger<>nil then
     result:=vorgaenger
     else
     result:=nil;
    end;
    
    function TElement.get_inhalt:TObject;
    begin
     if inhalt<>nil then
     result:=inhalt
     else
     result:=nil;
    end;
    
    end.
     
    
    TLifo:
    Code:
    unit uTLifo; //last in, first out
    
    interface
    
    uses uTElement;
    
    type
    
     TLifo=class
     protected
     ende:TElement; //um an das 'oberste' element des stapels zu kommen
     public
     destructor destroy;override;
     procedure push(i:TObject); //ein element einfügen
     function top:TObject; //den inhalt des obersten elements anzeigen
     function pop:TObject; //das oberste element vom stapel nehmen und inhalt ausgeben
     end;
    
    implementation
    
    destructor TLifo.destroy;
    var h:TObject;
    begin
     while top<>nil do
     h:=pop;
    end;
    
    procedure TLifo.push(i:TObject);
    var h:TElement;
    begin
     if top<>nil then
     begin
     h:=TElement.create(i);
     h.set_vorgaenger(ende);
     ende:=h;
     end
     else
     begin
     h:=TElement.create(i);
     ende:=h;
     end;
    end;
    
    function TLifo.top:TObject;
    begin
     if ende<>nil then
     result:=ende.get_inhalt
     else
     result:=nil;
    end;
    
    function TLifo.pop:TObject;
    var h:TElement;
    begin
     if ende<>nil then
     begin
     result:=ende.get_inhalt;
     h:=ende.get_vorgaenger;
     ende.free;
     ende:=h;
     end
     else
     result:=nil;
    end;
    
    end.
     
    
    EDIT: hab fehler gefunden, werd ma eben testen...mfg coach

    EDIT2: hat nich geholfen*heul*
     
  2. 2. März 2007
    AW: Mein Lifo funzt net~.~

    Vielleicht klaerst du uns mal auf, was nicht funktioniert?
     
  3. 2. März 2007
    AW: Mein Lifo funzt net~.~

    also, wenn ich ne testanwendung schreibe, in der ich lediglich den inhalt eines editfeldes als tobject 'pushe' und den inhalt dann per 'pop' auslesen will, bekomm ich nur schmarn (komischerweise nach jedem kompilieren das gleiche), also ich habe jetz konkret in der reihenfolge 4,3,2,1 die sachen eingefügt (sodass die halt als 1,2,3,4 wieder rauskommen sollten), aber ich bekomm beim ersten klick auf mein 'top' als rückgabewert 'OK', danach 2x 'age' und dann hab ich beendet...mfg coach
     
  4. 3. März 2007
    AW: Mein Lifo funzt net~.~

    Also bei mir Funktionieren die Klassen eigentlich ganz gut ohne Fehler:

    Code:
    Lifo:TLifo;
    begin
    Lifo := TLifo.Create;
    Lifo.push(TObject(Edit1.Text));
    Lifo.push(TObject(Edit2.Text));
    
    Showmessage(string(Lifo.pop));
    Showmessage(string(Lifo.pop));
    Lifo.destroy;
    end;
    
    Bei dem ersten Aufruf von pop wird der Text-Wert von "Edit2" zurückgegeben,
    und beim zweiten Mal der Wert von "Edit1" zurückgegeben. Also stimmt doch alles.

    Vielleicht hast du ein Fehler bei der Konvertierung in und aus einem TObjekt.

    Außerdem habe ich gemerkt, dass die if-Abfragen in der uTElement-Unit völlig unnötig sind,
    da wenn das Objekt nil ist dann wird auch dieser Wert "nil" der nächsten Variablen zugewiesen.

    uTElement:
    Code:
    unit uTElement; //Die 'zwischenklasse für die einzufügenden objekte
    
    interface
    
    type
    
     TElement=class
     protected
     vorgaenger:TElement;
     inhalt:TObject;
     public
     constructor create(i:TObject); //beim creator wird der inhalt direkt miteingebunden
     procedure set_vorgaenger(v:TElement);
     function get_vorgaenger:TElement;
     function get_inhalt:TObject; //liefert ein tobject, weshalb das lifo vielseitigerer wird
     end;
    
    implementation
    
    constructor TElement.create(i:TObject);
    begin
     //if i<>nil then Unnötige Abfrage
     inhalt:=i;
    end;
    
    procedure TElement.set_vorgaenger(v:TElement);
    begin
     //if v<>nil then Unnötige Abfrage
     vorgaenger:=v;
    end;
    
    function TELement.get_vorgaenger:TElement;
    begin
     //if vorgaenger<>nil then Unnötige Abfrage
     result:=vorgaenger
     //else 
     // result:=nil;
    end;
    
    function TElement.get_inhalt:TObject;
    begin
     //if inhalt<>nil then Unnötige Abfrage
     result:=inhalt
     //else 
     // result:=nil;
    end;
    
    end.
    Mfg

    Rushh0ur
     
  5. 3. März 2007
    AW: Mein Lifo funzt net~.~

    hab ich auch gemerkt, hab jetz einfach ne function gebastelt, die überprüft, ob das ding leer is...hab alle fehler gefunden und funzt jetz...mfg coach

    PS: bewertungen gehn raus und ~CLOSED~
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.