AGB  ·  Datenschutz  ·  Impressum  







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

Array Referenz in Klasse

Ein Thema von WoGe · begonnen am 5. Aug 2010 · letzter Beitrag vom 5. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

Array Referenz in Klasse

  Alt 5. Aug 2010, 15:59
Hallo
wie bekomme ich ein variables Array als Referenz in eine Klasse?
Delphi-Quellcode:
type
TMeinArray = Array of TMeinRecord
...
Var
 MeinArray : TMeinArray
..
 SetLengt(MeinArray,10);

...

Procedure Test(var aArray:TmeinArray);
begin
  x := aArray[5].Irgendwas
end;
Das funktioniert soweit.
In dieser Methode kann ich jetzt über den Name aArray zugreifen.

Wie bekomme ich jetzt folgendes hin - in meiner Klasse habe ich
Delphi-Quellcode:
..
fArray : TMeinArray;

...
procedure SetArray(var aArray:TMeinArray);
begin
  fArray := aArray;
end;
Das funktioniert nicht

Ich hoffe ich habe es verständlich genug formulieren können.

Grüsse
wo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#2

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 16:09
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 16:36
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 16:47
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 17:27
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 17:45
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 18:08
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 18:14
Kannst Du mal den fehlerverursachenden Quellcode posten?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 18:29
Hmmm
ich glaube nicht das es daran liegt.
Delphi-Quellcode:
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;
Wie gesagt wenn das property dierekt vor dem Aufruf dieser Procedur befüllt wird gehts, wenn etwas früher gehts nicht

Grüsse
wo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Array Referenz in Klasse

  Alt 5. Aug 2010, 19:05
Was mir spontan auffällt:
Zitat:
aChart.MoveTo(0, fMessdaten[i].GetWert2);
Welchen Wert hat i zu diesem Zeitpunkt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:05 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