Hallo Leute,
ich habe ein kleines Problem mit der Aufgabe meines Lehrers.
Er möchte, dass wir (Informatikkurs) eine einfache verkettete Liste erstellen. Gesagt, getan. So jetzt kommt er heute an und sagt ich habe es falsch, da ich mit Records gearbeitet habe oO. Ich poste mal mein Quellcode:
Delphi-Quellcode:
Interface
type
PListe = ^TListenElement;
TListenElement = Record
Daten: String;
Naechstes: PListe;
end;
...
TForm1 = class(TForm)
...
private
head: PListe;
aktuell: PListe;
tail: PListe;
...
implementation
procedure TForm1.Einlesen(Sender: TObject);
var p1,p2: PListe;
begin
New(p1);
p1^.Daten := Edit1.Text;
p1^.Naechstes := NIL;
if head = NIL then
head := p1
else
begin
p2 := head;
while(p2^.Naechstes <> NIL) do
p2:= p2^.Naechstes;
p2^.Naechstes := p1;
end;
aktuell := p1;
...
end;
...
Ich verstehe nicht was daran falsch sein sollte, naja egal. Er sagt ich soll es objektorientiert machen. Er will das ich 3 Units benutze (Ausgabe[Form], TEListe[wo head, tail & aktuell stehen soll] und TListenElement[siehe oben, von den Variablen gleich])
So dazu habe ich eine Frage:
Delphi-Quellcode:
type
TElist = class
private
head: TLElement;
tail: TLElement;
akt : TLElement;
count: Cardinal;
public
procedure add(Daten: Integer);
end;
implementation
procedure TElist.add(Daten: Integer);
var
p1, p2: TLElement;
begin
p1 := TLElement.Create;
p1.setData(Daten);
p1.setRechts(NIL);
if head = NIL then
head := p1
else
begin
p2 := head;
end;
...
end;
Laut meinem Lehrer ist new(p1) und p1 := TElement.Create das selbe und p1 erhält die Speicheradresse, aber das tut Delphi überhaupt nicht!!
Muss man nicht mit Zeiger arbeiten? Also ^ ? Er sagt nein...
Könnt ihr mir helfen, wie erhält p1 die Adresse? Boah, wieso muss man es kompliziert machen, wenn es auch einfach geht...
Danke