![]() |
property: 2 dimensionales Array
Hallo DP,
ich habe eine Klasse mit folgendem aufbau (gekürzt):
Delphi-Quellcode:
Wenn ich nun auf diese property lesend zugreife, klappt auch alles wunderbar.
type playing_field=Array[0..2*b,-2..2*l+2] of Integer;
type Tfield=class(TObject) private Ffield:playing_field; public property Field:playing_field read ffield write ffield; end; Nur bei
Delphi-Quellcode:
hapert es.
Feld.field[x,y]:=1;
("Der linken Seite kann nichts zugewiesen werden.") Ich habe es auch schon versucht, dass ich schreibe:
Delphi-Quellcode:
(Und eben die beiden funktionen/prozeduren weiter oben deklariere)
property Field[x,y:Integer]:playing_field read get_field write set_field;
Dann kommt aber eine Fehlermeldung ala "Inkompatible Typen". Weiß jemand wie es richtig funktioniert? PS: Ich habe mir auch Tutorials angeschaut, aber dort werden keine 2D Arrays behandelt :? |
Re: property: 2 dimensionales Array
Da statische Arrays Wertetypen sind, kann das genauso wenig wie bei Record-Properties funktionieren. Du brauchst entweder Zeiger oder dynamische Arrays.
|
Re: property: 2 dimensionales Array
N'abend,
schau dir mal TList.Items an. Das müsste auch zweidimensional gehen. In Get und Set kannst du dann gleich eine Bereichsprüfung mittels Min() und Max() einbauen, damit du dir nicht den Speicher zerschießt. Stefan |
Re: property: 2 dimensionales Array
Hmm, gut...
Mit Zeigern kenne ich mich nicht aus. Wie könnte ich denn bei einem dynamischen Array festlegen, dass der Index bei unter 0 beginnt? (In meinem Beispiel -2) |
Re: property: 2 dimensionales Array
So wie es in TList gemacht wurde werden die Werte in den eckigen Klammern zu Parameter. Erst sieht das so aus, als sei es ein Array, ist aber nur ein Parameter. Man kann an der Stelle auch irgendwie Strings übergeben, mit denen dann indiziert wird.
|
Re: property: 2 dimensionales Array
Zitat:
![]() Ich sehe gerade erst, dass du das ja schon versucht hast, du hattest nur einen kleinen Fehler:
Delphi-Quellcode:
Denn das Array ist ja bei dieser Lösung außen vor, wie McGuyver sagt.
property Field[x,y:Integer]: Integer ...
|
Re: property: 2 dimensionales Array
Also, das mit der TList versteh ich irgendwie nicht.
Das ist im Prinzip ein Array mit Zeigern oder? Aber wie kann ich sowas nutzen, muss ich für jedes Element/jeden Index einen eigenen Zeiger festlegen? |
Re: property: 2 dimensionales Array
Also, ich habe es nun ohne Properties versucht.
Der Zugriff sollte nun über Funktionen/Prozeduren (getValue,setValue) erfolgen. Allerdings erhalte ich nun eine Zugriffsverletzung beim Setzen. Kann es sein, dass man generell nichts an einer Eigenschaft eines Objektes ändern kann, sofern diese Eigenschaft ein statisches Array ist? :gruebel: (Edit: Wenn man Zeiger außer Acht lässt :P ) |
Re: property: 2 dimensionales Array
Eine Zugriffsverletzung kann z.B. daher kommen, dass Du auf einen nicht vorhanden Index zugreifen möchtest.
Delphi-Quellcode:
Das ist bei mir bei Arrays im Rahmen von FOR-Schleifen auch mal häufiger der Fall, wenn ich zu wenig nachdenke. Das solltest Du meiner Meinung nach zunächst mal überprüfen.
XYZ : array[1..10] of Integer;
[...] XYZ[0] := 45; // hier kracht es |
Re: property: 2 dimensionales Array
Nein, viel banaler.
Ich habe zwar
Delphi-Quellcode:
geschrieben, aber vergessen zu schreiben:
var feld:TFeld;
Delphi-Quellcode:
:stupid:
feld:=TField.Create();
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 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