![]() |
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Zitat:
Und nein, auch wenn Typ X auf Typ Y zuweisungskompatibel ist, ist ein Array von X nicht auf ein Array von Y zuweisungkompatibel. |
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Extended soll man eh nicht verwenden, somit ist es egal.
Estended war eh niemals für die direkte Verwendung/Speicherung vorgesehn. Und beim Überladen hast mit Extended außerhalb Windows (Android/iOS/OSX) wowieso Probleme, da es diesen Typ dort nicht gibt. OK ihn gibt es, aber er ist dort intern ein Double und schon hast mit deiner Überladung ein kleines Problemchen. Zitat:
Es ist allgemein besser, hier einen Standardtypen zu nutzen, denn so kann man dieses Array nicht nur mit der eigenen, sondern auch mit fremden Funktionen nutzen.
Delphi-Quellcode:
oder als
type TDblArr = TArray<Double>; // oder TDoubleDynArray
procedure AcceptMe(AArr: TDblArr); overload; ![]()
Delphi-Quellcode:
procedure AcceptMe(AArr: array of Double); overload;
denn sowas nimmt viele Arrays an, die aus irgendeinem Array von Double bestehen, also direkt ein Konstanten-Array ala
Delphi-Quellcode:
übergeben oder andere Array-Typen aus Doubles
[1.1, 2.2, 3.3]
und sogar statische Arrays ala
Delphi-Quellcode:
(siehe Post #1).
array[0..15] of Double
|
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() |
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Intern ist der Typ "Extended" entweder 10 Byte (Extended) oder 8 Byte (Double), je nach OS und Bitigkeit.
Wie groß der Typ nach außen ist, das hängt davon ab, wie, je nach OS, der Speicher aligned wird und wie der Compiler eingestellt wurde. Da kann er 8 bis 16 Byte sein, oder auch garnicht existieren.
Delphi-Quellcode:
{$EXTENDEDCOMPATIBILITY ON}
Hmm, OK, das mit Linux hatte ich nicht mitbekommen, aber da es Apple praktisch nur noch als 64 Bit gibt und man den 32 Bit-iOS-Simulator (Intel) vergessen kann, bleiben ja nur noch Win32 und Linux übrig (auf x86 ... nicht auf ARM, falls es das jemals gibt). Ich frag mich nur, wie Linux das eigentlich machen will? (der Typ OK, aber damit auch "schnell" rechnen .. nicht wie der emulierte Int64/UInt64 im Win32) Das war doch ein Ding der FPU und Jene gibt es in der 64 Bit-CPU (Intel/AMD) nicht mehr, sowie nicht im ARM. Offiziell Ursprünglich (außerhalb der Pascal/Delphi-Welt) war Extended eh nie zum Speichern vorgesehn, sondern vorwiegend nur für Zwischenschritte von Berechnungen. Aber OK, falls C-Compiler den Typ nicht kennen, dann kann man ihn auch dort teilweise aktivieren. "long double" (80-bit double extended format) im C++, bzw. double-double damals auf PowerPC. Nja, wird eh Zeit, dass wir Float128 (quadruple precision) im Delphi bekommen, was uns im ![]() |
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Zitat:
![]() ![]() Gruß, Andreas |
AW: Inkompatible Datentypen in Procedures bei Arrays mit Double bzw. Extended
Vielen Dank für eure hilfreichen Tipps!
Auf overload bin ich inzwischen selbst gekommen ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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