2016-07-20 23 views
1

Einfaches Beispiel:Delphi XE6, 3D-Array von Datensätzen mit boolean Mitglied Feldern bauen nicht

type 
    TGm = record 
    Rm,Nc,Sc,Wc,Ec,Su,Sd:boolean; 
    end; 

var 
    Dm: Array[1..20] of Array[1..20] of Array[1..20] of TGm; 
    Gm: TGm; 

... 

if (Dm(z,y-1,x).Ec) then Gm.Wc := TRUE; 

Wenn ich versuche, zu bauen, dass letzte Zeile markiert und zwei Fehler angezeigt:

'$1' does not contain a member named 'Ec' 
Type of expression must be BOOLEAN 

Fehle ich etwas ganz einfach hier?

Und, ja, ich bin Erzeugen eines Dungeon ;-)

+0

Die Klammern ... äußerst einfach, ja. Der Compiler-Fehler ist jedoch seltsam ... –

+0

@Sertac: Ich denke, der Compiler sieht es als eine Art anonymer Typ, intern namens '$ 1', wahrscheinlich die interne primäre Zeile des Dm-Typs. Ich vermute, das liegt daran, dass die Deklaration 'array [] von array [] von array [] of ... 'ist, was ungewöhnlich ist. Normalerweise haben Sie 'array [.., .., ..] of ...'. –

Antwort

2

Sie verwenden Klammern, wo Klammern sind erforderlich. Es sollte wie diese Stelle aussehen:

if Dm[z][y-1][x].Ec then Gm.Wc := TRUE; 

Ich würde vorschlagen, eine einzige mehrdimensionale Array statt:

var 
    Dm: Array[1..20, 1..20, 1..20] of TGm; 
    Gm: TGm; 

... 

    if Dm[z,y-1,x].Ec then Gm.Wc := TRUE; 
+0

Könnten Sie bitte erklären, was die erste Compiler-Nachricht bedeutet? Ich bin verwirrt, in der Regel Delphi Compiler-Nachrichten sind sehr freundlich ... –

+0

Ich kann den Fehler nicht reproduzieren, den Sie in meinem XE6 gezeigt haben. Die betreffende Zeile schlägt stattdessen mit "E2066 Fehlender Operator oder Semikolon" fehl. –

+0

@Remy: Ich bekomme das gleiche in XE4 (kein XE6 auf diesem Laptop) .. –