![]() |
Array-Länge in Prozedur verändern?
Delphi-Quellcode:
[Error] Unit1.pas(203): Incompatible types - bei SetLength(ziel, Length(ziel)+1);
procedure add2array(var ziel: array of integer; wert:integer);
begin SetLength(ziel, Length(ziel)+1); ziel[Length(ziel)-1] := wert; end; warum? ich habe doch mit 'var' Schreibzugriff gesetzt... |
Re: Array-Länge in Prozedur verändern?
nimm mal statt "array of integer" den Typ "TIntegerDynArray" aus der Unit Types.pas (also unter uses eintragen). Dann sollte es funktionieren.
Gruß |
Re: Array-Länge in Prozedur verändern?
Matthias hat die Lösung, die Erklärung ist in der Online-Hilfe zu finden:
Topic: Offene Array-Parameter Im Rumpf einer Routine gelten die folgenden Regeln für offene Array-Parameter.
Hier noch eine Umformulierung:
Delphi-Quellcode:
Grüße vom marabu
uses
Types; procedure AddValue(var ida: TIntegerDynArray; const value: Integer); begin SetLength(ida, Succ(Length(ida))); ida[High(ida)] := value; end; |
Re: Array-Länge in Prozedur verändern?
Muss es nicht
Delphi-Quellcode:
statt
High(Array);
Delphi-Quellcode:
oder irre ich mich grad?
length(Array);
|
Re: Array-Länge in Prozedur verändern?
length(array) gibt dir die Anzahl der Elemente.
high(array) gibt dir die Nummer des höchsten Elements. Er will aber die Anzahl der Elemente um 1 erhöhen, also braucht er die Anzahl die Elemente. |
Re: Array-Länge in Prozedur verändern?
Ich nehm da meistens 'ne lokale Variable, dat erspart mir daß mehrmalige auslesen der Länge ... ein Prozeduraufruf weniger ^^
Delphi-Quellcode:
PS: High(...) ist beim dynamischen Array auch nur Length(...)-1 und wird intern auch so errechnet ;)
procedure AddValue(var ida: TIntegerDynArray; const value: Integer);
var i: Integer; begin i := Length(ida); SetLength(ida, i + 1); ida[i] := value; end; PSS: dat const kannst'e och weglassen, macht beim Integer eh keinen Unterschied |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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