![]() |
Mehrdimensionales dynamisches Array an Prozedur übergeben
Hallo zusammen,
folgende Situation: Ich brauche ein globales zweidimensionales array. Die Länge muß aus einem file ausgelesen werden, also kann est erst zur Laufzeit mit setlength definiert werden. Wenn ich das aber folgendermaßen in einem Prozeduraufruf tun will:
Delphi-Quellcode:
(wobei laenge und breite funktionen sind, die die benötigten Daten aus der Datei auslesen)
procedure Felderzeugen (var tabelle : array of array of boolean);
var Zeile:string; i,j:integer; begin setlength (tabelle,laenge,breite); ... beschwert er sich: "Fehler] chiquadrat.pas(114): Bezeichner erwartet, aber 'ARRAY' gefunden", anscheinend mag er die mehrdimensionalität meines arrays also nicht. Die Hilfe ist dazu auch eher kryptisch: "Hinweis: In einigen Funktions- und Prozedurdeklarationen werden Array-Parameter in der Form array of Basistyp ohne festgelegten Indextyp angegeben:
Delphi-Quellcode:
In diesem Fall kann die Funktion auf alle Arrays des angegebenen Basistyps angewendet werden, unabhängig von der Größe der Arrays und der Art ihrer Indizierung. Es spielt auch keine Rolle, ob den Arrays der Speicherplatz statisch oder dynamisch zugewiesen wird. Weitere Informationen hierzu finden Sie im Abschnitt Offene Array-Parameter."
function CheckStrings(A: array of string): Boolean;
kann mir irgendwer helfen? wie kann man das umgehen? vielen Dank im vorraus Manuel [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: Mehrdimensionales dynamisches Array an Prozedur übergebe
Du musst das Array als Type deklarieren und dann den Type als Parameter übegeben ....
|
Re: Mehrdimensionales dynamisches Array an Prozedur übergebe
Willkommen im Forum !!
Um so Sachen zu umgehen kannst du dir einen eigenen Typ definieren:
Delphi-Quellcode:
type
MyArray = Array of Array of Boolean; //Diesen Typ kannst du dann übergeben: procedure Felderzeugen (var tabelle : Myarray); |
Re: Mehrdimensionales dynamisches Array an Prozedur übergebe
Danke vielmals für die promte Antwort, jetzt klappt es.
ciao Manuel |
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Hallo,
ich hätte dazu mal noch eine weiterführende Frage: wie funktioniert das "Unit-übergreifend"? Beispielsweise habe ich in einer Unit (Unit1) eine Klasse deklariert. Diese besitzt eine Prozedur um eine Berechnung auszuführen. Dazu benötige u.a. ich ein zweidimensionales Feld. In einer anderen Unit (Unit2) wird ein Objekt dieser Klasse erstellt und die Prozedur aufgerufen. Wenn ich das Programm kompilieren will bekomme ich nun immer die Fehlermeldung: "[DCC Fehler] Unit2.pas(1723): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen" Einen eigenen Typ habe ich schon deklariert:
Delphi-Quellcode:
type TArray2D = array[0..5] of array[0..2] of Double;
Bin mir allerdings unsicher, wo ich das genau hinschreiben muss. Hab auch einfach stumpf den Typ in beiden Units gleichermaßen deklariert, in der Hoffnung, dass das irgendwie funktioniert. Tat es aber leider nicht. Edit: Die jeweiligen Units sind im Implementation Bereich unter Uses "ineinander eingebunden" |
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Wenn Du den Typ in beiden Units deklarierst, sind das für den Compiler wieder 2 verschiedene Typen und somit nicht kompatibel. Ich würde den Typen entweder in einer eigenen Unit oder in der Unit mit der verarbeitenden Klasse deklarieren und in der anderen Unit einfach nur verwenden.
|
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Zitat:
|
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Zitat:
Leider funktioniert das nicht. Habe die Typdeklaration aus der Unit2 (in der das Object der Klasse erstellt und die Prozedur aufgerufen wird) entfernt. Jetzt erhalte ich folgende Fehlermeldung: "[DCC Fehler] Unit2.pas(46): E2003 Undeklarierter Bezeichner: 'TArray2D'" An welcher stelle in der Unit sollte ich den Typen eigentlich deklarieren? In der Klasse selbst oder allgemein? Derzeit ist der Typ allgemein deklariert. Zitat:
|
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Hast Du die Deklaration des Typs im implementation-Teil untergebracht? Dann verschieb sie mal in den interface-Teil.
|
AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
Steht in Unit1 direkt unter Interface
Unit1:
Delphi-Quellcode:
unit Unit1;
interface uses SysUtils, Types, Classes, Variants, Math, Dialogs; type TArray2D = array[0..5] of array[0..2] of Double; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 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