Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [gelöst] Dynamische Records anlegen klappt nicht (https://www.delphipraxis.net/74113-%5Bgeloest%5D-dynamische-records-anlegen-klappt-nicht.html)

Go2EITS 28. Jul 2006 09:08


[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:
    var R:array of T;
Als Erstes erstelle ich ein Record...
Delphi-Quellcode:
Procedure Record_Init;
begin
setlength(R,1);
end;
...um dann ein dyn. Feld zu erstellen:
Delphi-Quellcode:
procedure Record_ADD_Real(R:real);
begin
setlength(R[0].wr , 1)
end;
Aber da kommt der Fehler:
"Arraytyp erforderlich".

Was mache ich falsch? Hat jemand eine Lösung?

Union 28. Jul 2006 09:15

Re: Dynamische Records
 
R ist ja in dem Fall auch kein Array, sondern ein Real-Wert. Ausserdem solltest Du Dir dein Array typisieren.

shmia 28. Jul 2006 09:15

Re: Dynamische Records
 
Du verwendest zwei mal den Buchstaben "R" !!
Einmal als Übergabeparameter und einmal als
Delphi-Quellcode:
var R:array of T;
Ich kann dir nur raten, deinen Variablen "anständige" Namen zu geben.
goldene Regel:
globale Variablen erhalten lange, sprechende Namen
lokale Variablen und übergabeparameter dürfen auch kurzen Namen mit nur einem Buchstaben erhalten.

Go2EITS 28. Jul 2006 09:18

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.

Union 28. Jul 2006 09:26

Re: Dynamische Records anlegen klappt nicht
 
Lies doch mal die Antworten richtig: :warn:
Delphi-Quellcode:
procedure Record_ADD_Real(R:real);
begin
setlength(R[0].wr , 1)
end;
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:
Delphi-Quellcode:
procedure Record_ADD_Real(RealNumber : real);
begin
  setlength(R[0].wr , length(R[0])+1) ;
  R[0]wr[High(wr)] := RealNumber;
end;
Und ändere Deine Variablennamen sowie die Einrückung, wie von shmia vorgeschlagen.

Go2EITS 28. Jul 2006 09:45

Re: Dynamische Records anlegen klappt nicht
 
@Union
Zitat:

Lies doch mal die Antworten richtig: :warn:
Wenn ich Deine Antwort verstanden hätte, hätte ich nicht gepostet.

Danke trotzdem für die ausführliche Lösung. Das R in der
Delphi-Quellcode:
procedure Record_ADD_Real(R:real);
war der Grund. War ein "dummer" Fehler von mir.
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