![]() |
On-The-Fly-Array als Übergabeparameter
Hallo,
ich habe folgendes Problem: Ich würde gerne ein Array aus Booleans der Größe 5 on-the-fly erstellen, an eine Funktion übergeben und dort in einen record abspeichern. Der Code sieht so aus:
Delphi-Quellcode:
POutputObject = ^TOutputObject;
TOutputObject = record Ref: TOutput; [b]fittingDim: array of Boolean;[/b] end; procedure RegisterOutputClass(ObjRef: TOutput; [b]format: array of Boolean[/b]); var ListOfOutputObjects: TListOfOutputObjects; implementation procedure RegisterOutputClass(ObjRef: TOutput; [b]format: array of Boolean[/b]); var POObject : POutputObject; begin new(POObject); POObject^.Ref := ObjRef; [b]POObject^.fittingDim := format;[/b] end; Der Funktionsaufruf sieht so aus:
Delphi-Quellcode:
Bei der Zuweisung
RegisterOutputClass(TOutText, [b][true, true, false, false, false][/b]);
Delphi-Quellcode:
bekomme ich allerdings immer die Fehlermeldung: Incompatible Types: 'Array' and 'dynamic array'
[b]POObject^.fittingDim := format;[/b]
Weiß jemand weiter? - Danke! Gruß - Max |
Re: On-The-Fly-Array als Übergabeparameter
Du musst das Array vorher mit Array of Boolean deklarieren, mit SetLength die Größe zuweisen und danach die Werte in das Array eintragen und damit dann an die Funktion übergeben...
Du übergibst quasi eine "Konstante" (nämlich das Array), wo aber eine Variable (ein dynamisches Array) erwartet wird. Edit: Kurfassung:
Delphi-Quellcode:
procedure Blah;
var bArray : Array of Boolean; begin SetLength(bArray, 5); bArray[0] := True; bArray[1] := False; bArray[2] := True; bArray[3] := False; bArray[4] := True; DeineFunktion(DeinObjekt, bArray); // <-- Damit dürfte es dann gehen :) end; |
Re: On-The-Fly-Array als Übergabeparameter
: edit - hab Blödsinn geschrieben schnell weg damit.
|
Re: On-The-Fly-Array als Übergabeparameter
Leider rufe ich
Zitat:
- THX |
Re: On-The-Fly-Array als Übergabeparameter
@Akku:
Zitat:
Soll der Record in eine Datenbank ? Du definierst Records und Zeiger auf Records. Sollen diese in einer Liste verwaltet werden ? Hat 'FittingDim' was mit Installationsmaterial zu tun ? Möchtest du damit kennzeichnen ob verschiedene Dimensionen verfügbar sind ? Ein wenig mehr Hintergrundinfo wäre schon hilfreich ! :? Wenn deine Aufgabenstellung so ist wie ich nur vermuten kann, würde ich den Datentyp Integer verwenden und die verschiedenen Wahrheitswerte herausmaskieren. :gruebel: Aus einem Integer(=Longint=32Bit) erhältst du 32 Boolean(=256Bit) => Billawerbung: Sie sparen 28 Byte ! Zurück zur ursprünglichen Frage:
Delphi-Quellcode:
Denke so könnt's funktionieren. :?
type
TBoolArray = Array of Boolean; procedure ArrayTest(a:TBoolArray); begin end; function BoolArrayOf(const Values: array of Boolean):TBoolArray; begin // hier code ähnlich 'VarArrayOf' end; procedure TForm1.Button1Click(Sender: TObject); begin ArrayTest(BoolArrayOf([True, False, True])); end; |
Re: On-The-Fly-Array als Übergabeparameter
Hallo Max,
unabhängig davon, ob es eine bessere Lösung gibt, lässt sich dein syntaktisches Problem durch die Verwendung eines expliziten Array-Typs lösen. Ersetze einfach "array of Boolean" durch Types.TBooleanDynArray und alles wird gut. Grüße vom marabu |
Re: On-The-Fly-Array als Übergabeparameter
also su Types.TBooleanDynArray hab ich leider nichts gefunden.
Ich werde es jetzt wohl in einem Integer maskieren. Danke! |
Re: On-The-Fly-Array als Übergabeparameter
Types.TBooleanDynArray ist die sogenannte qualifizierte Schreibweise. Es soll dir sagen, dass der Typ TBooleanDynArray in der Unit Types deklariert ist. Du solltest vielleicht die von dir verwendete Delphi-Version in dein DP-User-Profil eintragen.
Freundliche Grüße marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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