![]() |
array als var-Parameter
Ich möchte eine Procedure, die soll mehreren Integer-Variablen den Wert 0 zuweisen.
Ich dachte ich könnte folgendes realisieren.
Delphi-Quellcode:
Und so soll die Funktion verwendet werden:
procedure SetToZero(aValues: array of Integer);
var a: Integer; begin for a := low(aValues) to High(aValues) do aValues[a] := 0; end;
Delphi-Quellcode:
Die Werte der Mengen ändern sich aber nicht. Sind immer noch 10 und 20.
lMenge1:=10;
lMenge2:=20; SetToZero([lMenge1,lMenge2]); Nun dachte ich, klar, fehlt der Var-Parameter. Also Funktion umgeschrieben und "var" vor avalues gesetzt.
Delphi-Quellcode:
Dann lässt sich folgende Zeile nicht mehr kompilieren.
procedure SetToZero(var aValues: array of Integer);
var a: Integer; begin for a := low(aValues) to High(aValues) do aValues[a] := 0; end;
Delphi-Quellcode:
SetToZero([lMenge1,lMenge2]);
Folgende Fehlermeldung:
Code:
Welchen Gedankenfehler mache ich?
[DCC Fehler] blubunit.pas(124): E2197 Konstantenobjekt kann nicht als Var-Parameter weitergegeben werden
|
AW: array als var-Parameter
Bei dieser Art der Übergabe handelt es sich um ein Open Array, das ist immer konstant. Versuch es doch einmal mit einer Typdeklaration, und diesen Typ übergibst Du dann.
|
AW: array als var-Parameter
Das Array nimmt nur die Werte auf und nicht die Referenzen/Zeiger zu den Variablen.
So kannst du nur die Werte im Array ändern, aber nicht die Variablen, wo diese Werte drin standen als du das Array erstellt hast ;) |
AW: array als var-Parameter
|
AW: array als var-Parameter
Die Übergabe in
Delphi-Quellcode:
ist mMn ein
SetToZero([lMenge1,lMenge2]);
Delphi-Quellcode:
!
array of const
Du müsstest es wie folgt deklarieren:
Delphi-Quellcode:
Ist jetzt schnell aus der Hüfte geschossen ...
type TArrayIntegers : TArray<integer>;
procedure SetToZero(var paInts : TArrayIntegers); begin ... end; procedure Irgendwas; var aIntegers : TArrayIntegers; begin aIntegers := TArrayIntegers.Create(10,20); SetToZero(aIntegers); end; Gruß Thomas |
AW: array als var-Parameter
Für alle, die es noch nicht verstanden haben ;)
Delphi-Quellcode:
procedure SetToZero( { ? } );
begin { ? } end; procedure Test; var Val1, Val2 : Integer; begin Val1 := 42; Val2 := 84; SetToZero([Val1,Val2]); Assert( ( Val1 = 0 ) and ( Val2 = 0 ), 'Mist, hat nicht hingehauen' ); end; |
AW: array als var-Parameter
Das geht wie Sir Rufo schon gesagt/angedeutet hat nur mit einem Array of PInteger.
Delphi-Quellcode:
Wenn dich das @ nicht stört, gehts so. Ansonsten fällt mir jetzt nichts ein.
procedure SetToZero(Werte: Array of PInteger);
var i: Integer; begin for i:= 0 to High(Werte) do Werte[i]^ := 0; end; procedure Test; var Val1, Val2 : Integer; begin Val1 := 42; Val2 := 84; SetToZero([@Val1,@Val2]); Assert( ( Val1 = 0 ) and ( Val2 = 0 ), 'Mist, hat nicht hingehauen' ); end; |
AW: array als var-Parameter
Danke für die Antworten. Ich habe es mir schon gedacht.
Habe nur gehofft, daß es etwas gibt, was ich noch nicht weis. Schade. Dann halt wieder:
Delphi-Quellcode:
Statt
lMenge1 = 0;
lMenge2 = 0; lMenge3 = 0; lMenge4 = 0;
Delphi-Quellcode:
SetToZero([lMenge1,lMenge2,lMenge3,lMenge4]);
|
AW: array als var-Parameter
Zitat:
Oder kommt das nicht in Frage für dich? |
AW: array als var-Parameter
Zitat:
Ich denke ich bleibe beim Alten. Das "@" tut mir irgendwie im Auge weh ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:38 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