AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

On-The-Fly-Array als Übergabeparameter

Ein Thema von Akku · begonnen am 2. Feb 2006 · letzter Beitrag vom 5. Feb 2006
Antwort Antwort
Akku

Registriert seit: 27. Jan 2006
29 Beiträge
 
#1

On-The-Fly-Array als Übergabeparameter

  Alt 2. Feb 2006, 22:22
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:

  RegisterOutputClass(TOutText, [b][true, true, false, false, false][/b]); Bei der Zuweisung
[b]POObject^.fittingDim := format;[/b] bekomme ich allerdings immer die Fehlermeldung: Incompatible Types: 'Array' and 'dynamic array'

Weiß jemand weiter?

- Danke!

Gruß - Max
  Mit Zitat antworten Zitat
Benutzerbild von SubData
SubData

Registriert seit: 14. Sep 2004
Ort: Stuhr
1.078 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: On-The-Fly-Array als Übergabeparameter

  Alt 2. Feb 2006, 22:25
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;
Ronny
/(bb|[^b]{2})/
  Mit Zitat antworten Zitat
Akku

Registriert seit: 27. Jan 2006
29 Beiträge
 
#3

Re: On-The-Fly-Array als Übergabeparameter

  Alt 2. Feb 2006, 22:37
: edit - hab Blödsinn geschrieben schnell weg damit.
  Mit Zitat antworten Zitat
Akku

Registriert seit: 27. Jan 2006
29 Beiträge
 
#4

Re: On-The-Fly-Array als Übergabeparameter

  Alt 2. Feb 2006, 22:43
Leider rufe ich

Zitat:
DeineFunktion(DeinObjekt, bArray); // <-- Damit dürfte es dann gehen
aber nicht aus einer Funktion auf, sondern aus dem begin-end-teil einer unit - keine Chance, dass irgendwie kompakt zu lösen?

- THX
  Mit Zitat antworten Zitat
Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#5

Re: On-The-Fly-Array als Übergabeparameter

  Alt 3. Feb 2006, 05:24
@Akku:
Zitat von Akku:
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.
Was meinst du mit 'in einem Record abspeichern' ?

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.

Aus einem Integer(=Longint=32Bit) erhältst du 32 Boolean(=256Bit) => Billawerbung: Sie sparen 28 Byte !

Zurück zur ursprünglichen Frage:

Delphi-Quellcode:
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;
Denke so könnt's funktionieren.
Otto
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: On-The-Fly-Array als Übergabeparameter

  Alt 3. Feb 2006, 08:13
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
  Mit Zitat antworten Zitat
Akku

Registriert seit: 27. Jan 2006
29 Beiträge
 
#7

Re: On-The-Fly-Array als Übergabeparameter

  Alt 5. Feb 2006, 16:24
also su Types.TBooleanDynArray hab ich leider nichts gefunden.
Ich werde es jetzt wohl in einem Integer maskieren.

Danke!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: On-The-Fly-Array als Übergabeparameter

  Alt 5. Feb 2006, 17:04
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz