![]() |
as-operator mit TList
he leute, kleines problemchen. ich hab seit einiger zeit mal wieder mein delphi ausgestaubt und bin mir nicht so ganz sicher mit typenumwandlungen. besser gesagt: ich bin anderer meinung als der compiler.
Delphi-Quellcode:
schöner typ. jetzt will ich den in eine liste vom typ TList einspeichern und sortieren lassen. klappt alles wunderbar, nur beim sortieren zickt er rum:
TChVoc = record
filename: string; ... coeff: extended; end;
Delphi-Quellcode:
will er nicht, "as" ist auf diesen datentyp nicht anwendbar. wie bitte? as ist doch genau dafür da, das der compiler das einfach SCHLUCKT und nicht rummeckert?
function TForm1.compvoc(Item1, Item2: Pointer): integer;
begin result := (Item1 as TChVoc).coeff; end; noch ne kleine frage am rande: ich hab diese liste und will mir dann item raussuchen und darauf rumarbeiten. da die TChVoc-dinger in einem array liegen kann ich an den ursprung nicht heran. ich suche mir einen eintrag raus, krieg einen pointer zurück, und jetzt? kann ich mir einfach eine variable vom typ TChVoc nehmen, den pointer da drauf knallen und fröhlich daran rumwerkeln? ist das dann eine kopie der daten oder immer noch ein pointer, also müsste ich die daten manuell zurück in das array schreiben? skizze wenn es zu konfus war: array of TChVoc -> TList gefüllt mit TChVoc-Pointern -> ?? TChVoc-Variable? weg zurück? danke schonmal im voraus! |
Re: as-operator mit TList
Das ginge, wenn das kein Record, sondern eine Klasse wäre. Ansonsten versuch es mal mit einem harten Cast.
Delphi-Quellcode:
[edit] Ich bin jetzt nicht sicher, aber ich glaube, diese Klasse muss dann auch noch von TPersistent abgeleitet sein, diese Angabe ist allerdings ohne Gewähr. [/edit]
function TForm1.compvoc(Item1, Item2: Pointer): integer;
begin result := TChVoc(Item1).coeff; end; |
Re: as-operator mit TList
Zitat:
Grrrr. :wall: Records und keine Objekte :wall: |
Re: as-operator mit TList
danke für die schnelle antwort!
aber bei nem harten cast
Delphi-Quellcode:
sagt er "invalid typecast" wtf? notlösung wären natürlich objekte...
result := TChVoc(Item1).coeff;
|
Re: as-operator mit TList
Wie fügst du die Einträge in die Liste? Ich denke da ist der Fehler.
|
Re: as-operator mit TList
Delphi-Quellcode:
aber das wäre ja ein laufzeitfehler.soundarray: array of TChVoc; ... for i := 0 to length(soundarray)-1 do VocArray.Add(@soundarray[i]); |
Re: as-operator mit TList
Ist soundarray lokal in einer Methode definiert?
|
Re: as-operator mit TList
Zitat:
Delphi-Quellcode:
Result{Integer} := .coeff{Extended};
Delphi-Quellcode:
type PChVoc = ^TChVoc;
TChVoc = record filename: string; ... coeff: extended; end; result := PChVoc(Item1).coeff; die Verlgeichs-Funktion compvoc will gern das Ergebnis und nicht den Wert:
Delphi-Quellcode:
function TForm1.compvoc(Item1, Item2: Pointer): integer;
begin if PChVoc(Item1).coeff < PChVoc(Item2).coeff then Result := -1 else if PChVoc(Item1).coeff > PChVoc(Item2).coeff then Result := 1 else Result := 0; end; |
Re: as-operator mit TList
Hallo,
müsste es nicht eigentlich TChVoc(Item1^) heißen? Oder ohne cast, wenn man Item1 und Item2 als PChVoc definiert. MfG xZise |
Re: as-operator mit TList
das PChVoc(Item1).coeff entspricht PChVoc(Item1)^.coeff, nur macht Delphi das ^ hier automatisch
PS: hier dereferenziert Delphi nicht automatisch! > PChVoc(Item1) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 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