Új hozzászólás Aktív témák

  • czappa

    aktív tag

    Sziasztok!
    Már megint elakadtam, most a mutatókkal gyűlt meg a bajom.
    Suliban volt szó egyirányú listákról; ehhez írtam egy kis progit, ami még csak annyit csinál, hogy lehet a végéhez felvenni egy új elemet és az egészet listázni (kiíratni egy listboxba).
    Ez szép és jó és elvileg működik is ([link]), ám én balga arra gondoltam, hogy nem recorddal kéne megcsinálni hanem osztály példányokkal ha már úgyis oop-t tanulok.
    Itt azonban már nem mentek olyan simán a dolgok. Ha csak egy elemet veszek fel a listába, akkor minden működik rendesen, azonban több elemnél a kilistázáskor a progi bekerül egy végtelen ciklusba és már két napja ezen rágódok és nem tudok rájönni sehogy se; ennek itt a linkje:
    [link]
    Azért bemásolok ide kódrészeket:
    private
    fej, p: point;
    uj: TRek;
    ujertek: integer; (...)

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    //beszúrás a lista végéhez
    ujertek:=StrToInt(Edit1.Text);
    Edit1.Text:='';
    uj:=TRek.Create(ujertek);
    uj.setKov(nil);
    if fej=nil then //ha nincs még eleme a listának
    begin
    fej:=@uj;
    end
    else //ha a fej nem nil-re mutat, azaz ha van már eleme a listának
    begin
    p:=fej;
    while p.getKov<>nil do
    begin
    p:=p^.getKov;
    end;
    p^.setKov(@uj);
    end;
    Edit1.SetFocus;
    end;

    procedure TForm1.ListazClick(Sender: TObject);
    var i: integer; //
    begin
    for i:=ListBox1.Count downto 0 do //a LsitBox1 elemeinek törlése
    ListBox1.Items.Delete(i);
    p:=fej;
    while p<>nil do
    begin
    Listbox1.Items.Add( IntToStr(p^.getTart) );
    p:=p^.getKov;

    end;
    end;

    és a TRek osztály:
    unit Rek;

    interface
    type
    point = ^TRek;
    TRek=class
    private
    tart : Integer ;
    kov : point;
    public
    constructor create(tart: integer);
    procedure setKov(kov: point);
    function getKov: point;
    function getTart: integer;
    end;


    Végülis a lényegi részeket fentebb kimásoltam.

    [Szerkesztve]

    [Szerkesztve]

Új hozzászólás Aktív témák

Hirdetés