![]() |
Übergabe von dynamischen Arrays an Prozeduren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein Problem mit der Übergabe von dynamischen Arrays an andere Prozeduren. Wenn ich die größe eines dynamisches Array mit SetLength festgelegt habe, möchte ich von einer Prozedure ausgeben lassen, wie groß das Array ist. Wenn die Prozedur innerhalb der eigenen Unit steht, ist das kein Prob; wenn ich die Prozedur in eine andere Unit verlege, wird das Projekt nicht mehr compiliert und unten erscheint die Meldung "inkompatible Typen: array und dynamic array". Bitte seht Euch das angehängte Projekt an. Ich komme einfach nicht weiter. Gruss Florian |
Re: Übergabe von dynamischen Arrays an Prozeduren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
hier mal die geänderten Codestellen: Main.pas:
Delphi-Quellcode:
und in der Unit2.pas:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; //<== unit2 entfernt type TDatenfelder = record a, b: extended; end; TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure Aus(var d: array of tDatenfelder); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation uses unit2; //<== neu hinzugefügt
Delphi-Quellcode:
[edit]unit unit2; interface uses Dialogs, SysUtils, main; //<== main hinzugefügt //<== type-deklaration entfernt procedure Auswertung(var d: array of tDatenfelder); implementation procedure Auswertung(var d: array of tDatenfelder); Begin showmessage(inttostr(low(d)) +' bis ' + inttostr(high(d))); End; end. das geänderte Projekt angehängt! [/edit] |
Re: Übergabe von dynamischen Arrays an Prozeduren
Vielen Dank!
Ich schau's mir gleich an! Es läuft - damit kann ich mir mein eigentliches Problem wieder ansehen. |
Re: Übergabe von dynamischen Arrays an Prozeduren
Hi,
was du hier siehst Zitat:
Das klingt nicht schön und ist auch nicht schön. Du hast hier eine Abhängigkeit geschaffen, die du vermeiden kannst. Die Nachteile wurden glaube ich schon woanders festgestellt und lassen sich leicht finden. Zur Lösung: Verwende eine dritte Unit, in der du den Datentyp festlegst. Unit3 (als Beispiel) enthält dann nur noch die Typdeklaration. Diese Unit kann von den beiden anderen eingebunden werden und alles funktioniert (die Namen sollten natürlich besser als unit2 und unit3 gewählt werden). Unit3 könnte also so aussehen:
Delphi-Quellcode:
Die kannst du dann wie gewohnt in allen Units verwenden (ist einfach sauberer!).
unit Unit3;
interface type TDatenfelder = record a, b: extended; end; TDatenfelderArray = Array of TDatenfelder; implementation end. Gruß Der Unwissende |
Re: Übergabe von dynamischen Arrays an Prozeduren
Also als soo schlechten Stil seh ich das inzwischen garnicht mehr an.
Ich verschiebe jetzt eh alle Units, welcher nicht im Interface-Teil nötig sind in die Implementation, also dahin, wo sie wirklich gebraucht werden. Außerdem hab ich z.B. in einem aktuellen Projekt Units, welche nicht nur einige Typen, sondern ganze Funktionen gegenseitig einbinden und das nicht nur über Kreuz (Dreieck, Viereck ... Zickzack). Vorallem diese Funktionen jetzt noch in weitere Units auszulagern wäre nicht so schön, da sie logisch in die entsprechenden Units reingehören. Und beim Auslagern in weitere Units aus den eh schon über 50 noch viel mehr Units würden, also alles auch noch unübersichtlicher würde. Und zum Schluß: Wozu ein Featzre nicht nutzen, wenn es schonmal vorhanden ist :zwinker: |
Re: Übergabe von dynamischen Arrays an Prozeduren
Zitat:
Klar, es ist von mir etwas übertrieben hier pauschal zu sagen ist schlecht. Ich denke aber, dass es sich in einem solchen Fall (insbesondere für Datentypen) sehr leicht vermeiden lässt. Funktionen die logisch zusammen gehören denke ich kann man gut in eine Klasse stecken. Klar, es geht auch ohne OOP. So oder so kannst du die Gruppen von Units, die logisch zusammen gehören in einen eigenen Ordner packen. Trennst du hier sauber, nutzt du ein Feature und hast die Zusammengehörigkeit und keine Abhängigkeiten (also bei sauberem Design). |
Re: Übergabe von dynamischen Arrays an Prozeduren
Zitat:
Genauso wie break, exit, goto etc. Alle diese Dinge, die nicht der "reinen Lehre" entsprechen ;) sollte man eben nur einsetzen, wenn sie wirklich Sinn machen bzw. notwendig sind. (Meine Meinung... aber diese Diskussion gabs ja auch schon mal :gruebel: ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz