Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   denkfehler bei array? ObjectList (https://www.delphipraxis.net/150675-denkfehler-bei-array-objectlist.html)

khh 23. Apr 2010 12:00


denkfehler bei array? ObjectList
 
hallo zusammen,
mit
Delphi-Quellcode:
   ObjectList := TObjectList.create;
   Frezept := Trezept.create(self);
   ObjectList.Add(Frezept);
   ObjectList.Add(Frezept);

  Trezept(ObjectList[0]).zutat[0] := 'Milch';
  Trezept(ObjectList[1]).zutat[0] := 'Wasser';
füge ich 2 Objecte zu der Liste hinzu und "fülle" sie mit Zutaten.

warum zeigt mir
Delphi-Quellcode:
 

   showmessage(Trezept(ObjectList[0]).zutat[0]);
   showmessage(Trezept(ObjectList[1]).zutat[0]);
2 mal das gleiche an, nämlich Wasser?

bernau 23. Apr 2010 12:07

Re: denkfehler bei array? ObjectList
 
Du Hast der Objectlist zwei mal das gleiche Objekt zugewiesen.

objectlist[0] und objectlist[1] zeigen beide auf das gleiche objekt.

Somit dürfte zuerst der Wert "Milch" zugewiesen werden. Diese wird dann mit "Wasser" überschrieben.

So wäre es richtig:

Delphi-Quellcode:
ObjectList := TObjectList.create;
   Frezept := Trezept.create(self);
   ObjectList.Add(Frezept);
   Frezept := Trezept.create(self);
   ObjectList.Add(Frezept);

  Trezept(ObjectList[0]).zutat[0] := 'Milch';
  Trezept(ObjectList[1]).zutat[0] := 'Wasser';

Gerd

khh 23. Apr 2010 12:08

Re: denkfehler bei array? ObjectList
 
ich danke dir
heisst ich muss jedes object das ich in der Liste speichere, separat erstellen, auch wenn die Namen identisch sind:

DeddyH 23. Apr 2010 12:23

Re: denkfehler bei array? ObjectList
 
Natürlich, da eine Objektinstanz ja nur ein Zeiger ist. Fügst Du den mehrfach ein und änderst die dahinterstehenden Daten, änderst Du sie überall ;)

khh 23. Apr 2010 12:34

Re: denkfehler bei array? ObjectList
 
Zitat:

Zitat von DeddyH
Natürlich, da eine Objektinstanz ja nur ein Zeiger ist. Fügst Du den mehrfach ein und änderst die dahinterstehenden Daten, änderst Du sie überall ;)

jau hab ich grad gedacht, dass die sonst auf den gleichen Speicherbereich zeigen ;-)


ich danke euch


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:26 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