![]() |
Array Referenz in Klasse
Hallo
wie bekomme ich ein variables Array als Referenz in eine Klasse?
Delphi-Quellcode:
Das funktioniert soweit.
type
TMeinArray = Array of TMeinRecord ... Var MeinArray : TMeinArray .. SetLengt(MeinArray,10); ... Procedure Test(var aArray:TmeinArray); begin x := aArray[5].Irgendwas end; In dieser Methode kann ich jetzt über den Name aArray zugreifen. Wie bekomme ich jetzt folgendes hin - in meiner Klasse habe ich
Delphi-Quellcode:
Das funktioniert nicht
..
fArray : TMeinArray; ... procedure SetArray(var aArray:TMeinArray); begin fArray := aArray; end; Ich hoffe ich habe es verständlich genug formulieren können. Grüsse wo |
AW: Array Referenz in Klasse
Du willst also in dem fArray die selben Änderungen mitbekommen, bzw. genau die selben Daten haben, wie in dem externen Array?
Wenn ja, dann garnicht. Man könnte sich aber eine Referenz auf die Variable holen, in welcher das externe Array liegt. (diese Variable darf dann aber nicht vorzeitig entfernt/freigegeben werden) oder Besser du nimmst kein Array, sondern ein Objekt und legst darin ein Array-Property an. |
AW: Array Referenz in Klasse
Hallo
ja ich wollte eigentlich in fArray das selbe haben, wie im externen Array Ich wollte dieses eigentlich in den "Namespace" meiner Klasse importieren Das Ziel ist das Array (oder ein anderes gleichen Typs) von der Klasse bearbeiten zu lassen Und danach noch andere Methoden darauf anzuwenden Grüsse wo |
AW: Array Referenz in Klasse
Und wieso übergibst Du das Array als Var-Parameter? Wenn ich Dich richtig verstanden habe, willst Du keine Kopie erstellen, sondern mit dem übergebenen Array hantieren, richtig? Hast Du es einmal so versucht?
Delphi-Quellcode:
type
TMyRec = record intval: integer; end; TMyArray = array of TMyRec; TMyClass = class private FArray: TMyArray; procedure SetArray(const Value: TMyArray); public procedure ShowCount; property MyArray: TMyArray read FArray write SetArray; end; procedure TMyClass.SetArray(const Value: TMyArray); begin FArray := Value; end; procedure TMyClass.ShowCount; begin ShowMessage(inttostr(Length(FArray))); end; |
AW: Array Referenz in Klasse
Leider gibt das eine Zugriffs-Verletzung
Ich greife zur zeit (testhalber) nur lesend zu Übrigens dachte ich das das Const eine Lokale Kopie anlegt?? Grüße wo |
AW: Array Referenz in Klasse
Nein, const legt keine Kopie an, sondern übergibt das Original schreibgeschützt. Dass da eine AV kommt liegt wahrscheinlich daran, dass Du noch kein Array angelegt und übergeben hast. Deshalb wird da Length() auf nil angewendet.
|
AW: Array Referenz in Klasse
Wenn man die Property direkt vor dem ausführen der Methode befüllt
funktioniert dies. Befülle ich es direkt nach dem Setlength gibts die AV Anscheinend darf der Inhalt des Array zwischen Zusweiung an Property und Verwendung nicht verändert werden. Deswegen hatte ich ursprünglich auch einen VAR Parameter. Kann man dem Übergabemechanismus irgendwie anders beibringen, das das eigentlich nur ein Pointer ist? Grüsse wo |
AW: Array Referenz in Klasse
Kannst Du mal den fehlerverursachenden Quellcode posten?
|
AW: Array Referenz in Klasse
Hmmm
ich glaube nicht das es daran liegt.
Delphi-Quellcode:
Wie gesagt wenn das property dierekt vor dem Aufruf dieser Procedur befüllt wird gehts, wenn etwas früher gehts nicht
procedure TFrame10Sec.TestMaleDaten;
var i: Integer; k: Integer; begin // ----------------------------------------------------------------- aChart.SuppressPaint := True; aChart.ClearGraf; aChart.ActiveLayer := 1; aChart.Scale1X.RangeLow := 0; aChart.Scale1X.RangeHigh := High(fMessdaten); aChart.Scale1Y.RangeLow := 00000; aChart.Scale1Y.RangeHigh := 60000; aChart.DataColor := clGray; k := High(fMessdaten) -1 ; aChart.MoveTo(0, fMessdaten[i].GetWert2); for i := 1 to k do begin aChart.DrawTo(i, fMessdaten[i].GetWert2); end; aChart.SuppressPaint := False; end; Grüsse wo |
AW: Array Referenz in Klasse
Was mir spontan auffällt:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:21 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