![]() |
Function(Matrix:TArray) mit Arrays unterschiedlicher Länge ?
Hallo,
sicherlich ist die Frage schon oft gestellt worden, habe auf die Schnelle aber nichts gefunden: Es ist das leidige Problem mit der Übergabe eines Arrays unterschiedlicherLänge in der Parameterliste einer Procedure / Function. Ich möchte ein Array mit einer bestimmten Länge in der Parameterliste einer Funktion (diese kann in einem anderen Unit / Komponente programmiert sein) übergeben. Wenn die Arrays im Funktionenaufruf und im Function-Code nicht genau des selben Typs sind gibt es Type-Missmatch. Ich will aber in einer Unit-Bibliothek ganz allgemeine Functions schreiben, die mit Arrays von dieser oder jenen Länge aufgerufen werden können. Danke für Hilfe E. B. |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
Delphi-Quellcode:
meinst du sowas? :dance:
type
TArrayTyp : array of String function (AArray : TArrayTyp):Boolean; |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
Hallo, ich meine so etwas:
Delphi-Quellcode:
Danke,
...
interface type TMatrix = array of array of single: var AMat : TMatrix; BMat : array[1..5, 1..7] of single; ... function Matrixsumme(Matrix:TMatrix); begin .... end; ... ... // Hauptprogramm Code begin ... SetLength(AMat,512,512); Matrixsumme(AMat); ... MatrixSumme(BMat); ... end; end. E. B. |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
warum machst du nicht beides als TMatrix? musst halt beim zweiten die Länge entsprechen setzen.
|
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
und genau das habe ich versucht
Delphi-Quellcode:
Danke
...
interface type TMatrix = array of array of single: var AMat, BMat : TMatrix; ... function Matrixsumme(x, y:integer; Matrix:TMatrix):single; begin setLength(Matrix, x, y); ... end; ... ... // Hauptprogramm Code begin ... //(AMat,5,7); A:=Matrixsumme(5,7,AMat); ... //(BMat,512,512); B:=MatrixSumme(512,512,BMat); // und an dieser Stelle gibts Probleme, denn Matrix in Matrixsumme ist 5,7 ... end; end. E. B. |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
geht es jetzt oder nicht?
versuche mal Matrix als var-Parameter(var Matrix : TMatrix) |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
Versuche mal den Typ direkt anzugeben (nur an dieser Stelle):
Delphi-Quellcode:
function Matrixsumme(x, y:integer; Matrix: array of array of single):single;
|
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
Mal ganz grundsätzlich: "normale" Array und dynamische Arrays sind als Übergabeparameter
nicht kompatibel.
Delphi-Quellcode:
type
TMatrix = array of array of single: var AMat : TMatrix; BMat : array[1..5, 1..7] of single; // es ist mit Delphi nicht möglich, eine Procedure zu bauen, die sowohl // AMat als auch BMat als Parameter verarbeiten kann !! |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
Danke, und was machen wir da am besten?
Danke E. B. |
Re: Function(Matrix:TArray) mit Arrays unterschiedlicher Län
@shmia: nicht ganz - bei einfacher Indizierung sind dynamische und 0-basierte Arrays kompatibel, Beispiel:
Delphi-Quellcode:
In diesem Fall kann man Bla mit beiden Variablen aufrufen (zumindest in D2K6).
type
TVektor = array of single; var VektorA: TVektor; VektorB: array [0 .. 7] of single; function Bla(X: array of single): single; begin ... end; Bei höheren Dimensionen geht das allerdings nicht mehr. Mein Vorschlag von oben ergibt direkt einen Syntaxfehler in der Parameterdeklaration. @EccoBravo: Du kannst halt die Variable nicht direkt initialisieren, sondern musst das einmal beim Start machen mit "SetLength(MatrixB, 6, 8)" - dynamische Arrays sind immer Null-basiert, fangen also nicht mit 1 an. Noch was (ist mir gerade aufgefallen): wieso machst du ein SetLength mit einem by-value Parameter? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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-2025 by Thomas Breitkreuz