AGB  ·  Datenschutz  ·  Impressum  







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

Konstante mit dynamischem Array?

Offene Frage von "himitsu"
Ein Thema von himitsu · begonnen am 7. Apr 2005 · letzter Beitrag vom 4. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#1

Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:48
Gehe ich recht der annahme, dass es leider keinen Weg bit, um ein dynamisches Array mit einem bestimmten Wert vorzubelegen?


Mein Problem ist volgendes:
ich habe einige Proceduren, denen ich auch mal eine Konstante mit einem Array übergeben möchte.

Und mir ist auch bewußte, das es ja normaler Weise möglich ist, ein statisches Array an eine Prozedur zu übergeben, welche ein dynamisches Array (kein Var-Parameter) empfängt.

Nur liegt bei mir das Array nicht direkt, sondern innerhalb eines Records vor,
wodurch ich ja einen neuen Typ, mit statischem Array für die Konstante, erstellen müßte.

Allerdings meckert ja dann der Compiler über die inkompatieblen Typen



Natürlich könte man ja statt der Konstanten einige Variablen nehmen, welche beim Start, über eine Prozedur, belegt werden ... aber genau dieses möchte ich nicht, da nicht immer alle Konstanten benötigt werden und in solchen Fällen ja Speicher verschwenden.




Statisch geht da ja ganz gut:
Delphi-Quellcode:
Type T1 = Record
    a: Integer;
    b: Integer;
    c: Array[0..2] of Integer;
  End;

Const x: T = (a: 0; b: 1; c: (2, 3, 4));
aber dynamisch kann ich das Array nicht belegen.
Delphi-Quellcode:
Type T2 = Record
    a: Integer;
    b: Integer;
    c: Array of Integer;
  End;

Const y: T2 = (a: 0; b: 1; c: (2, 3, 4));
Und T1 ist natürlich (leider) nicht mit T2 kompatiebel.
$2B or not $2B
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:51
Wie sieht denn deine Prozedur aus? Falls es etwas in der Art von Foo(Params: array of ...) sein sollte, dürfte der Compiler bei einer Übergabe des Arrays im Record nicht meckern. Etwas Code könnte helfen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 14:58
Die Procedure ist ja egal

Procedure xyz(Const p: T2); ich könnte es ja auch mal ohne Const versuchen, aber ändern dürfte das ja eh nichts, außer dass dann der Parameter vorher noch kopiert wird, was ich eigentlich nicht will.
Procedure xyz(p: T2);
Und den allgemeinen Aufbau der Records habe ich oben auch noch nachgetragen.
$2B or not $2B
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:04
Das kann ja nicht funktionieren... Wenn du explizit angibst, das die Funktion einen Record T1 erwartet, wird der Compiler nie aufhören zu meckern, wenn du einen T2 übergibst.

Edit: Was du aber tun könntest, wäre den Record als Pointer zu übergeben und der Funktion dann per Parameter zu sagen, welchen Typ Array sie vorfindet, weil dynamische Arrays nicht wie die statischen gleich mit dem ersten Wert anfangen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:10
Das es nicht klappt, war/ist mir auch so schon klar ... brauchte es ja nichtmal zu versuchen.

Pointer kommen aber nicht in Frage ... das hat interne/funktionelle Gründe.

Die Konstanten müssen also den selben Typ wie der Parameter haben ... wodurch ja das Problem mit dem vorbelegen der dynamischen Arrays auftritt
$2B or not $2B
  Mit Zitat antworten Zitat
opfer.der.genauigkeit

Registriert seit: 14. Feb 2005
66 Beiträge
 
#6

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:18
Schon mal an diese Form der Deklaration gedacht?

procedure test(var test);
Stellen Sie sich bitte Zirkusmusik vor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#7

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:22
Zitat von opfer.der.genauigkeit:
Schon mal an diese Form der Deklaration gedacht?

procedure test(var test);

Bei Var-Parametern wird das mit der kompatibilität von Parametern ja noch viel schlimmer -.-''

dort muß der Parameter ja genau überainstimmen ... dort geht ja noch nichtmal die übergabe von statischen an dynamischen Arrays.

Sonst geht das ja, bei mir ist halt nur das Problem, dass die Arrays in Records eingebettet sind.
$2B or not $2B
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:26
Dann nimm doch Klassen mit Get/Set-Properties, aber das bbelegt dir dann wieder zu viel Speicher...
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:31
Zitat von himitsu:
Bei Var-Parametern wird das mit der kompatibilität von Parametern ja noch viel schlimmer -.-''

dort muß der Parameter ja genau überainstimmen ...
Ähm, untypisierte Variablen?

@topic:
Delphi-Quellcode:
type
  TFoo = record
    a: Integer;
    b: Integer;
    c: array of Integer;
  end;

const
  EmptyDynArray = nil;
  Foo: TFoo = (
    a: 42;
    b: 0;
    c: EmptyDynArray;
  );
Wenn das nicht reicht mach ein Objekt daraus un initialisiere es im Contructor.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Konstante mit dynamischem Array?

  Alt 7. Apr 2005, 15:36
Auch keine Klassen, ich bin froh, dass das bis jetzt nur als Record habe und nicht als Klasse.

Wie gesagt, es ist genau so gewollt, dass es als Record und nicht über Pointer und Klassen abläuft.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:23 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