AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

property: 2 dimensionales Array

Ein Thema von Spezi · begonnen am 4. Feb 2010 · letzter Beitrag vom 5. Feb 2010
Antwort Antwort
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#1

property: 2 dimensionales Array

  Alt 4. Feb 2010, 22:26
Hallo DP,
ich habe eine Klasse mit folgendem aufbau (gekürzt):
Delphi-Quellcode:
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;
Wenn ich nun auf diese property lesend zugreife, klappt auch alles wunderbar.
Nur bei Feld.field[x,y]:=1; hapert es.
("Der linken Seite kann nichts zugewiesen werden.")

Ich habe es auch schon versucht, dass ich schreibe:
property Field[x,y:Integer]:playing_field read get_field write set_field; (Und eben die beiden funktionen/prozeduren weiter oben deklariere)

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
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 22:56
Da statische Arrays Wertetypen sind, kann das genauso wenig wie bei Record-Properties funktionieren. Du brauchst entweder Zeiger oder dynamische Arrays.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 23:08
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
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#4

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 23:08
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)
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 23:20
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.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 23:26
Zitat von Spezi:
Wie könnte ich denn bei einem dynamischen Array festlegen, dass der Index bei unter 0 beginnt?
Gar nicht, also wahrscheinlich doch lieber Array Properties.
Ich sehe gerade erst, dass du das ja schon versucht hast, du hattest nur einen kleinen Fehler:
property Field[x,y:Integer]: Integer ... Denn das Array ist ja bei dieser Lösung außen vor, wie McGuyver sagt.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#7

Re: property: 2 dimensionales Array

  Alt 4. Feb 2010, 23:41
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?
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#8

Re: property: 2 dimensionales Array

  Alt 5. Feb 2010, 00:30
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?
(Edit: Wenn man Zeiger außer Acht lässt )
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: property: 2 dimensionales Array

  Alt 5. Feb 2010, 05:27
Eine Zugriffsverletzung kann z.B. daher kommen, dass Du auf einen nicht vorhanden Index zugreifen möchtest.

Delphi-Quellcode:
 XYZ : array[1..10] of Integer;

 [...]

  XYZ[0] := 45; // hier kracht es
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.
Michael Kübler
  Mit Zitat antworten Zitat
Spezi

Registriert seit: 14. Feb 2009
Ort: Deutschland ;-)
65 Beiträge
 
Delphi 2005 Personal
 
#10

Re: property: 2 dimensionales Array

  Alt 5. Feb 2010, 16:16
Nein, viel banaler.

Ich habe zwar
var feld:TFeld; geschrieben, aber vergessen zu schreiben:
feld:=TField.Create();
Wer Rechtschreibfehler findet darf Sie behalten
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz