![]() |
[gelöst] Dynamische Records anlegen klappt nicht
Hallo, DP!
Nun habe ich mal wieder ein Problem. Und schildere meine Vorgehensweise. Ich möchte mal dyn. Records mit dyn. Feldern haben. z. B.
Delphi-Quellcode:
type
T = record Wr : Array of real; Wi : Array of integer; Ws : Array of String; end; Die Krux ist: Ich habe dyn. Arrays in einem dyn. Record. Also lege ich den Record dyn. an:
Delphi-Quellcode:
Als Erstes erstelle ich ein Record...
var R:array of T;
Delphi-Quellcode:
...um dann ein dyn. Feld zu erstellen:
Procedure Record_Init;
begin setlength(R,1); end;
Delphi-Quellcode:
Aber da kommt der Fehler:
procedure Record_ADD_Real(R:real);
begin setlength(R[0].wr , 1) end; "Arraytyp erforderlich". Was mache ich falsch? Hat jemand eine Lösung? |
Re: Dynamische Records
R ist ja in dem Fall auch kein Array, sondern ein Real-Wert. Ausserdem solltest Du Dir dein Array typisieren.
|
Re: Dynamische Records
Du verwendest zwei mal den Buchstaben "R" !!
Einmal als Übergabeparameter und einmal als
Delphi-Quellcode:
Ich kann dir nur raten, deinen Variablen "anständige" Namen zu geben.
var R:array of T;
goldene Regel: globale Variablen erhalten lange, sprechende Namen lokale Variablen und übergabeparameter dürfen auch kurzen Namen mit nur einem Buchstaben erhalten. |
Re: Dynamische Records anlegen klappt nicht
@Union
? R ist: VAR R:Array of T und somit ein Record und kein Realwert. Der Realwert müsste mit R[1].WR angesprochen werden. Aber irgendwo ist hier mein Fehler... @shmia: So mache ich eigentlich auch, nach der goldenen Regel. Im Test wollte ich übersichtlich arbeiten, anscheinend erwirke ich das Gegenteil. - Aber R ist doch Array of T; Da muss ich doch R[1].WR ansprechen und nicht T[1].WR. Dies wäre doch gänzlich falsch. |
Re: Dynamische Records anlegen klappt nicht
Lies doch mal die Antworten richtig: :warn:
Delphi-Quellcode:
In Deinem Code übergibtst Du R als Real, und auf eine Real kannst Du Setlength nicht verwenden. Der Lokale Parameter ist in Deiner Funktion sichtbar und "überschreibt" die ausserhalb deklarierte Variable. Richtig wäre:
procedure Record_ADD_Real(R:real);
begin setlength(R[0].wr , 1) end;
Delphi-Quellcode:
Und ändere Deine Variablennamen sowie die Einrückung, wie von shmia vorgeschlagen.
procedure Record_ADD_Real(RealNumber : real);
begin setlength(R[0].wr , length(R[0])+1) ; R[0]wr[High(wr)] := RealNumber; end; |
Re: Dynamische Records anlegen klappt nicht
@Union
Zitat:
Danke trotzdem für die ausführliche Lösung. Das R in der
Delphi-Quellcode:
war der Grund. War ein "dummer" Fehler von mir.
procedure Record_ADD_Real(R:real);
CU! :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 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