Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Const record (https://www.delphipraxis.net/152845-const-record.html)

hansmaad 9. Jul 2010 09:35

Delphi-Version: 2010

Const record
 
Hallo Zusammen...
Ich möchte ein const record deklarieren, das selber ein record Feld besitzt:

Delphi-Quellcode:
type
    A = record
        x : Integer;
        y : Integer;
    end;

    B = record
        xy : A;
        z : Integer;
    end;
const
    AA : A = (x : 0; y : 0);
    BB : B = (xy : AA; z : 0); // <--
Code:
 E2029 '(' erwartet, aber Bezeichner 'AA' gefunden
Geht das nicht?

Danke&Grüße
hansmaad

mkinzler 9. Jul 2010 09:38

AW: Const record
 
Versuch mal
Delphi-Quellcode:
BB : B = (xy : (AA); z : 0);

hansmaad 9. Jul 2010 09:43

AW: Const record
 
Das hatte ich auch schon ausprobiert.
Delphi-Quellcode:
BB : B = (xy : (AA); z : 0);
Code:
E2003 Undeklarierter Bezeichner: 'AA'
Edit:

Das geht: (ich mein zwar auch das schon ausprobiert zu haben, aber nu gehts;-))
Delphi-Quellcode:
BB : B = (xy : (x : 0; y : 0); z : 0);

Mich würde trotzdem noch interessieren, ob es auch eine Lösung gibt, die AA verwendet.

himitsu 9. Jul 2010 09:45

AW: Const record
 
Typisierte Konstanten sind ja keine echten Konstanten
(es sind nur schreibgeschützte Variablen)

Also könnte es sein, daß die strenge Typenprüfung AA also nicht richtig als Konstante an dieser Stelle anerkennt.

Delphi-Quellcode:
BB : B = (xy : (x : 0; y : 0); z : 0);
.

Delphi-Quellcode:
BB : B = (xy : (x : AA.x; y : AA.y); z : 0);

gammatester 9. Jul 2010 09:47

AW: Const record
 
Es dürfen nur konstante Ausdrücke verwendet werden. "Typed const" sind nicht konstant. Man kann keinen konstanten Record definieren.

himitsu 9. Jul 2010 09:54

AW: Const record
 
"echte" Konstante:
Delphi-Quellcode:
const NAME = WERT;
.

typisierte Konstante:
Delphi-Quellcode:
const NAME: TYP = WERT;
.

(falls jemand den Unterschied nicht gleich erkennt)

mleyen 9. Jul 2010 10:03

AW: Const record
 
Folgendes würde funktionieren:
Delphi-Quellcode:
type
  PA = ^A;
  A = record
    x: Integer;
    y: Integer;
  end;

  B = record
    xy: PA;
    z: Integer;
  end;
 
const
  AA: A = (x: 10; y : 0);
  BB: B = (xy: @AA; z : 0);

hansmaad 9. Jul 2010 10:15

AW: Const record
 
Danke euch allen, gute Infos:thumb:

Aber was genau heißt denn "typisierte Konstanten sind nicht konstant"?

Delphi-Quellcode:
AA.x := 1;
führt zu der von mir erwarteten Fehlermeldung ".. kann nichts zugewiesen werden".
AA ist eine typisierte Konstante und für mich ziemlich konstant. Falsch?

mirage228 9. Jul 2010 10:17

AW: Const record
 
Über den Compiler-Schalter
Delphi-Quellcode:
{$J+}
solltest Du solche Konstanten dennoch beschreiben können ;)

hansmaad 9. Jul 2010 10:40

AW: Const record
 
Zitat:

Zitat von mirage228 (Beitrag 1034457)
Über den Compiler-Schalter
Delphi-Quellcode:
{$J+}
solltest Du solche Konstanten dennoch beschreiben können ;)

Aha...ok... naja ich will das ja gar nicht:wink:

Und gleich noch eine Frage zu const.
Delphi-Quellcode:
procedure Foo;
const
  AA : A = (x : 0; y : 0);
begin
 //...
end;
Wann wird AA initialisiert? First call, bei jedem Call, bei Programmstart...?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Seite 1 von 2  1 2      

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