Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   wo deklariert man ein Record? (https://www.delphipraxis.net/83794-wo-deklariert-man-ein-record.html)

dassi87 6. Jan 2007 15:57


wo deklariert man ein Record?
 
Hi,

mal ne vielleicht dumme Frage, aber wo deklariert man ein Record?
Ich dachte wenn ichs unter type anlege kann nix schief gehen, in meinem Buch wird es aber erst im implementation-Teil als Variable eingeführt.

Ist eins davon "richtiger" oder gibts da überhaupt einen Unterschied? denn mein Programm zeigt wegen der Deklaration einen Internal Error an.

Danke
Gruß Dassi

faux 6. Jan 2007 15:58

Re: wo deklariert man ein Record?
 
Hallo!

Ein Record ist (grob gesagt) eine Variable, die mehrere Variablen enthalten kann. Also wird sie in der var Sektion deklariert.
Du kannst natürlich auch zuerst einen Typ anlegen, der ein Record "ist" und dann eine Variable von diesem daklarieren.

Delphi-Quellcode:
type
  TAdresse = record
    Strasse: string;
    Nummer: Byte;
  end;

var
  Name: record
    Vorname, Namchname: string;
  end;
  Privat: TAdresse;
Das sind beides gleichwertige Records, nur unterschiedlich deklariert.

Grüße
Faux

xaromz 6. Jan 2007 16:02

Re: wo deklariert man ein Record?
 
Hallo,
Zitat:

Zitat von faux
Ein Record ist (grob gesagt) eine Variable, die mehrere Variablen enthalten kann. Also wird sie in der var Sektion deklariert.

Falsch. Ein Record ist (grob gesagt) ein Typ, der aus mehreren Vaiablen zusammengesetzt ist. Er wird also mit type definiert und mit var deklariert.
Delphi erlaubt zwar das Definieren und Deklarieren in einer Anweisung, aber so deklarierte Records sind nicht zuweisungskompatibel.

Gruß
xaromz

dassi87 6. Jan 2007 16:07

Re: wo deklariert man ein Record?
 
Also soweit hab ich das zwar verstanden, alos schon mal danke, aber wie genau setzte ich das jetzt um?
wenn ich:

var
Mautsystem: TMautsystem;
TFahrzeuginstanz : record
Instanz: TFahrzeug;
empty: boolean;
end;

schreibe, dann erkennt er die Eigenschaften Instanz und Empty nicht an im Verlauf des Programmes, wenn ich aber vorher TFahrzeuginstanz als type festlege und dann deklariere dann sagt er identifier redeclared. was mach ich da falsch? ist sicher bloß ein dummer denkfehler

mkinzler 6. Jan 2007 18:47

Re: wo deklariert man ein Record?
 
Du hast die Antworten nicht richtig gelesen, es muß:
Delphi-Quellcode:
type
    TFahrzeuginstanz : record
        Instanz: TFahrzeug;
        empty: boolean;
    end;
var
    Mautsystem: TMautsystem;
heißen.

dassi87 7. Jan 2007 15:01

Re: wo deklariert man ein Record?
 
ok danke

McLing 9. Jan 2007 13:45

Re: wo deklariert man ein Record?
 
Der ganze Huddl entsteht nur dadurch, dass nicht sauber auseinandergehalten wird, was es bedeutet, wenn man einen Typ bzw. eine Variable deklariert. Die obige Unterscheidung zwischen "Definition" und "Deklaration" finde ich in diesem Zusammenhang auch nicht besonders hilfreich, weil beide Vorgänge letztendlich eben doch "Definitionen" sind. Nur sind eben die "definierten Dinge" von völlig unterschiedlicher Art: wichtiger scheint mir daher die Unterscheidung zwischen "Typ" und "Variable", oder allgemeiner "Klasse" und "Instanz".

Und um die Verwirrung komplett zu machen, gestattet Delphi auch noch, dass man beide Vorgänge in einem Aufwasch erledigt - wovon ich nur abraten kann! Für die Praxis sollte man vor jeder Vereinbarung einer strukturierten Variablen ihren Typ deklariert haben. Das ist vielleicht ein bisschen dogmatisch, vergrößert aber auf die Dauer die Chance, dass man versteht, was man tut.

Gruss

cruiser 9. Jan 2007 14:37

Re: wo deklariert man ein Record?
 
Vielleicht ein wenig offtopic, aber wenn man in einem grösseren Projekt z.B. auf mehreren Forms diese Records, Klassen, Sets, wasauchimmer braucht bietet es sich sogar an, das in eine Extra Unit zu verschieben um zirkulare Referenzen zu vermeiden

DP-Maintenance 9. Jan 2007 18:58

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Hier gehts auch um Delphi


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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