Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Generic List of records (https://www.delphipraxis.net/192238-generic-list-records.html)

bernhard_LA 2. Apr 2017 09:24

Generic List of records
 
wir verwenden eine generische Liste aus Punkten um eine Funktion darzustellen . Im Sample Code die Definition der Kurve und der TestCode :



Delphi-Quellcode:
  TCurve = class(TList<TPointF>)
  private
  ....

  public

  end;



var
  i: Integer;
  aTPointF: TPointF;
  aCurve: TCurve;

begin
  aCurve := TCurve.Create;
  for i := -10 to 10 do
  begin

    aTPointF.X := i;
    aTPointF.Y := -10 + i * i - i;

    aCurve.Add(aTPointF) //  -> AV
  end;

end;
diese Code Sequenz habe ich schon in mehreren Anwendungen erfolgreich verwendet.
jetzt bekomme ich eine Fehlermeldung bei aCurve.Add ().


in der Unit System.types :


Delphi-Quellcode:
  // Calculate the needed size of the heap object
  Inc(PByte(typeInfo), PDynArrayTypeInfo(typeInfo).name);

DeddyH 2. Apr 2017 09:35

AW: Generic List of records
 
Kann ich hier mit Tokyo nicht nachvollziehen. Ich vermute den Fehler an ganz anderer Stelle (Typdeklaration mit demselben Namen wie eine Variable oder sowas).

HolgerX 2. Apr 2017 10:29

AW: Generic List of records
 
Hmm...

Zitat:

Zitat von bernhard_LA (Beitrag 1366166)
Delphi-Quellcode:
begin
  aCurve := TCurve.Create;
  for i := -10 to 10 do
  begin

    aTPointF.X := i;
    aTPointF.Y := -10 + i * i - i;

    aCurve.Add(aTPointF) //  -> AV
  end;

end;

(Ich kenne mich mit GenericLists nicht wirklich aus, die gibt es in D6 nicht ;) )

Mal ne ganz blöde Frage:
Wird bei List.Add() immer eine KOPIE des Records in die Liste eingehängt, oder das übergebene Record selber?

Ansonsten hast Du doch immer das selbe Record mit den selben Werten (des letzten Records) in der Liste...

bernhard_LA 2. Apr 2017 10:38

AW: Generic List of records
 
Danke für den Hinweis. Den Fehler jetzt gefunden : die Create Function der generischen Liste war falsch, inherited create vergessen.

komisch nur , der Code wurde schon x mal verwendet .......

himitsu 2. Apr 2017 12:05

AW: Generic List of records
 
Eventuell machen die jetzt mehr im Constructor.

Zitat:

Zitat von HolgerX (Beitrag 1366168)
Mal ne ganz blöde Frage:
Wird bei List.Add() immer eine KOPIE des Records in die Liste eingehängt, oder das übergebene Record selber?

die TList<T> hat intern einen
Delphi-Quellcode:
array of T
und kopiert darein genau den Typen, den man in der Deklaration bei <T> angegeben hat.
Also hier eine Kopie des Records und es wird natürlich auch auf das Speichermanagement von gemanageten Typen (Strings, dyn. Arrays und Interfaces) geachtet.


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