![]() |
Wieso kann man Listenelemente nicht kopieren?
Wieso kann man Listenelemente nicht kopieren?
Ich versuche ein Element aus einer Liste zu kopieren. Wenn ich die kopie veränder, ändert sich das orginal selbst. Hier mal im extrem Fall:
Delphi-Quellcode:
Das Element ist gelöscht!!!
procedure TElement.xy;
var Kopie: TElement; begin Kopie := Self; Kopie.Free; end; Das stellt mich echt vor Probleme. Kann mir jemand schlaueres eine Anregung geben, wie ich mit dem Problem fertig werde? Grüße |
Re: Wieso kann man Listenelemente nicht kopieren?
Du kopierst nur den Zeiger auf das Element und greifst damit immer auf das gleiche Element zu. Also nix mit kopiert (vom Zeiger abgesehen).
ganz allgemein:
Delphi-Quellcode:
Wobei darin enthaltene Objekte durch den Destruktor wohl auch freigegeben werden. Kommt jetzt darauf an, was TElement genau für eine Klasse ist.
Kopie.Create
Kopie.Assign(self) |
Re: Wieso kann man Listenelemente nicht kopieren?
Danke erstmal ;).
Ich kann die Assign Methode nicht nutzen. Delphi zeigt den Fehler: Unbekannterbezeichner an. TElement ist von der Klasse TObject (TElement = class(TObject)). Das mit dem Zeiger hört sich sehr sinnvoll an. Die Delphi Hilfe sagt,ich könne die Assign Methode nur für TCollection nutzen. Wie soll ich das machen? |
Re: Wieso kann man Listenelemente nicht kopieren?
Zitat:
|
Re: Wieso kann man Listenelemente nicht kopieren?
Muss ich die Klasse umdefinieren?
...Das habe ich gerade probiert: TElement=class(TPersistent). Der Rechner kennt aber kein TPersistent. Habe ich was falsch verstanden? |
Re: Wieso kann man Listenelemente nicht kopieren?
uses classes eingetragen?
die OH sollte TPersistent aber finden und dort steht (zumindest bei D5) auch die evtl. zu verwendende Unit |
Re: Wieso kann man Listenelemente nicht kopieren?
![]() Und als zweites musst du die Methode "Assign" bzw "AssignTo" überschreiben, damit Delphi auch weiß, was den für Daten übernommen werden müssen. Mal ein kleines Beispiel:
Delphi-Quellcode:
MfG
type
TAssignBeispiel = class(TPersistent) private FEineZahl : Integer; procedure AssignTo(Dest: TPersistent); public property EineZahl : Integer read FEineZahl write FEineZahl; procedure Assign(Source: TPersistent); override; end; [...] procedure TAssignBeispiel.AssignTo(Dest: TPersistent); begin if Dest is TAssignBeispiel then TAssignBeispiel(Dest).FEineZahl := Self.FEineZahl else inherited; end; procedure TAssignBeispiel.Assign(Source: TPersistent); begin if Source is TAssignBeispiel then Self.FEineZahl := TAssignBeispiel(Source).FEineZahl else inherited; end; xZise PS: Mist da war jemand schneller... [edit]AssignTo + else-Zweig(e)[/edit] |
Re: Wieso kann man Listenelemente nicht kopieren?
Zitat:
|
Re: Wieso kann man Listenelemente nicht kopieren?
Ich Idiot habe natürlich die uses deklaration vergessen.:wall:
Zeigt keine Fehler mehr an.... muss das Programm aber nochmal überarbeiten weil ich jetzt Errors habe. Da kommt tatsächlich: "TElement kann nicht zu TElement zugewiesen werden". |
Re: Wieso kann man Listenelemente nicht kopieren?
Naja wie gesagt ;) Assign überschreiben (AssignTo ist imho nur optional)
Zitat:
MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 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 by Thomas Breitkreuz