Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrdimensionales dynamisches Array an Prozedur übergeben (https://www.delphipraxis.net/37556-mehrdimensionales-dynamisches-array-prozedur-uebergeben.html)

Fussel 7. Jan 2005 10:20


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:
procedure Felderzeugen (var tabelle : array of array of boolean);
     var Zeile:string;
         i,j:integer;
     begin
      setlength (tabelle,laenge,breite);
      ...
(wobei laenge und breite funktionen sind, die die benötigten Daten aus der Datei auslesen)
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:
function CheckStrings(A: array of string): Boolean;
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."


kann mir irgendwer helfen? wie kann man das umgehen?

vielen Dank im vorraus

Manuel

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Orbmu2k 7. Jan 2005 10:23

Re: Mehrdimensionales dynamisches Array an Prozedur übergebe
 
Du musst das Array als Type deklarieren und dann den Type als Parameter übegeben ....

Nikolas 7. Jan 2005 10:24

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);

Fussel 7. Jan 2005 11:06

Re: Mehrdimensionales dynamisches Array an Prozedur übergebe
 
Danke vielmals für die promte Antwort, jetzt klappt es.

ciao
Manuel

ndy 23. Apr 2015 09:54

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"

DeddyH 23. Apr 2015 09:57

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.

Bjoerk 23. Apr 2015 10:00

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
 
Zitat:

Zitat von ndy (Beitrag 1298869)
Hab auch einfach stumpf den Typ in beiden Units gleichermaßen deklariert, in der Hoffnung, dass das irgendwie funktioniert. Tat es aber leider nicht.

Das kann man so nicht machen. Vielleicht machst du auch besser eienen eignen Thread auf als einen von vor 10 Jahren zu "kapern"?

ndy 23. Apr 2015 10:04

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben
 
Zitat:

Zitat von DeddyH (Beitrag 1298871)
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.

Danke für die schnelle Antwort.

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:

Zitat von Bjoerk (Beitrag 1298872)
Vielleicht machst du auch besser eienen eignen Thread auf als einen von vor 10 Jahren zu "kapern"?

Was hat das alter des Threads damit zu tun? Ich fand die Frage passt hier gut rein und wollte nicht extra einen neuen Thread aufmachen und dann auf diesen hier verwiesen werden. ;)

DeddyH 23. Apr 2015 10:10

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.

ndy 23. Apr 2015 10:20

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 04:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz