![]() |
Dyn. Array als Parameter übergeben und in Prozedur vergrößer
Hallo ich habe folgende Prozedur:
Delphi-Quellcode:
und will nun innerhalb der Prozedur mit SetLength(_container,33); das Array vergrößern?
procedure fill_container(var _edifactstring : string; _container : array of TContainer);
Warum geht das nicht ? => der Compiler meldet ungültiger Typ! Falls das ganze nur über Zeigerarithmetik geht...wie kann ich ein dyn Array als Zeiger übergeben ? aber normalerweise sollte ja auch in Delphi ein byRef - Prameter nur eine Kapselung der Zeigerarithmetik sein. Naja bin auf die Antworten gespannt. Danke im Vorraus |
Re: Dyn. Array als Parameter übergeben und in Prozedur vergr
du müsst für dein array of einen neuen Typen definieren und diesen dann verwenden.
|
Re: Dyn. Array als Parameter übergeben und in Prozedur vergr
Dieses Problem findet früher oder später jeden Delphianwender.
zum Verständnis:
Delphi-Quellcode:
"array of TContainer" ist jeweils eine eigenständige Typdeklaration.
var
_container1: array of TContainer; _container2: array of TContainer; Der Compiler interpretiert das so:
Delphi-Quellcode:
Die beiden Typen sind zwar auf gleiche weise deklariert, aber für den Compiler nicht identisch.
type
Typ1 = array of TContainer; Typ2 = array of TContainer; var _container1: Typ1; _container2: Typ2; Eine Zuweisung von einer Variablen an die andere schlägt mit der Meldung "Inkompatible Typen" fehl. Der Typ von Array-Variablen muss dazu explizit deklariert werden.
Delphi-Quellcode:
Die Prozedur sollte dann etwa so aussehen:
type
TContainerArray = array of TContainer; var _container1: TContainerArray; _container2: TContainerArray;
Delphi-Quellcode:
Das var vor _container ist erforderlich, damit innerhalb der Prozedur nicht mit einer Kopie des Arrays gearbeitet wird.
procedure fill_container(var _edifactstring : string; var _container : TContainerArray);
Änderungen werden sonst außerhalb der Prozedur nicht sichtbar. Das var vor _edifactstring ist nur dann sinnvoll, wenn innerhalb der Prozedur Änderungen an dieser Variablen vorgenommen werden und diese ebenfalls außerhalb der Prozedur sichtbar werden sollen. |
Re: Dyn. Array als Parameter übergeben und in Prozedur vergr
Zitat:
Delphi-Quellcode:
ist _container kein dynamisches Array sondern ein "Open array". Siehe Delphi-Hilfe (Open array parameters):
procedure fill_container(var _edifactstring : string; _container : array of TContainer);
Zitat:
|
Re: Dyn. Array als Parameter übergeben und in Prozedur vergr
In diesem Anwendungsfall ist ein "Offener Array-Parameter" nicht die richtige Wahl.
Die Größe des Arrays soll innerhalb der Prozedur verändert werden. Bei Übergabe eines dynamischen Arrays als var-Parameter ist das möglich. |
Re: Dyn. Array als Parameter übergeben und in Prozedur vergr
Zitat:
Nix für ungut Gammatester |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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