AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Mehrdimensionales dynamisches Array an Prozedur übergeben

Mehrdimensionales dynamisches Array an Prozedur übergeben

Offene Frage von "DeddyH"
Ein Thema von Fussel · begonnen am 7. Jan 2005 · letzter Beitrag vom 23. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
Fussel

Registriert seit: 7. Jan 2005
Ort: Mainz
5 Beiträge
 
#1

Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 7. Jan 2005, 11:20
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:

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]
  Mit Zitat antworten Zitat
Benutzerbild von Orbmu2k
Orbmu2k

Registriert seit: 29. Nov 2004
Ort: Erfurt
254 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mehrdimensionales dynamisches Array an Prozedur übergebe

  Alt 7. Jan 2005, 11:23
Du musst das Array als Type deklarieren und dann den Type als Parameter übegeben ....
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Mehrdimensionales dynamisches Array an Prozedur übergebe

  Alt 7. Jan 2005, 11:24
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);
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Fussel

Registriert seit: 7. Jan 2005
Ort: Mainz
5 Beiträge
 
#4

Re: Mehrdimensionales dynamisches Array an Prozedur übergebe

  Alt 7. Jan 2005, 12:06
Danke vielmals für die promte Antwort, jetzt klappt es.

ciao
Manuel
  Mit Zitat antworten Zitat
ndy

Registriert seit: 18. Mär 2015
Ort: Dresden
8 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 10:54
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:

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"

Geändert von ndy (23. Apr 2015 um 10:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 10:57
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 11:00
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"?
  Mit Zitat antworten Zitat
ndy

Registriert seit: 18. Mär 2015
Ort: Dresden
8 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 11:04
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.



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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.533 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 11:10
Hast Du die Deklaration des Typs im implementation-Teil untergebracht? Dann verschieb sie mal in den interface-Teil.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
ndy

Registriert seit: 18. Mär 2015
Ort: Dresden
8 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Mehrdimensionales dynamisches Array an Prozedur übergeben

  Alt 23. Apr 2015, 11:20
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr.
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