Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Auf Dyn.Array klassenübergreifend zugreifen (https://www.delphipraxis.net/25673-auf-dyn-array-klassenuebergreifend-zugreifen.html)

mytar 10. Jul 2004 09:23


Auf Dyn.Array klassenübergreifend zugreifen
 
Ich hab in meiner Hauptklasse ein Dyn. Array

Ich hab nun eine weitere Klasse TKlasse erstellt, und im Konstruktor das Dyn.Array der Hauptklasse übergeben.

Ich möchte nun auf das dyn. Array, sodass sich auch das Dyn.Array in der Hauptklasse ändert, (nicht opbjektorientiert würde man das "CALL by reference" heißen) zugreifen.

Hier der Konstruktor:

Delphi-Quellcode:
type
  TKlasse = class
  private
   FArray: TDynamicArray;
  public
   constructor Create(AArray: TDynamicArray);
  end;

constructor TKlasse.Create(AArray: TDynamicArray);
begin

  FArray := AArray;

end;

d3g 10. Jul 2004 09:44

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Was spricht gegen Pointer?

Delphi-Quellcode:
type
  PDynamicArray = ^TDynamicArray;

  TKlasse = class
  private
    FPArray: PDynamicArray;
  public
    constructor Create(AArray: TDynamicArray);
  end;

  constructor TKlasse.Create(AArray: TDynamicArray);
  begin
    FPArray := @AArray;
  end;

mytar 10. Jul 2004 10:00

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Braucht es die Pointer Deklaration uebhaupt, das dyn. Array (Array of Integer)
besteht ja aus Pointern?

d3g 10. Jul 2004 10:23

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Lieber ein Pointer zu viel als einer zu wenig. Probiers doch einfach aus.

Muetze1 10. Jul 2004 11:36

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Moin!

Es braucht keinen Pointer - die Definition wie du sie zuerst bei deiner Frage schon hattest reicht vollkommen aus.

MfG
Muetze1

mytar 10. Jul 2004 16:14

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Ich habe das dyn. Array in der Hauptklasse bereits vor dem Konstruktor-Aufruf gefüllt,

nach dem Zuweisen im Konstruktor ist FArray leer.

Ich habs auch mit der Pointer-Variante, probiert, funktioniert nicht!

bitte helft mir

aogwaba 10. Jul 2004 16:47

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
in der Hilfe steht:
Zitat:

Wenn X und Y Variablen desselben dynamischen Array-Typs sind, führt die Anweisung X := Y dazu, dass X auf dasselbe Array wie Y zeigt. (Es ist nicht erforderlich, vor dieser Operation Speicher für X zu reservieren.) Im Gegensatz zu Strings und statischen Arrays wird COPY-ON-WRITE nicht für dynamische Arrays verwendet. Deshalb werden diese nicht automatisch kopiert, bevor einem ihrer Elemente ein Wert zugewiesen wird. Beispielsweise hat A[0] nach der Ausführung des folgenden Quelltextes den Wert 2:

var
A, B: array of Integer;
begin
SetLength(A, 1);
A[0] := 1;
B := A;
B[0] := 2;
end;

Wenn A und B statische Arrays wären, hätte A[0] immer noch den Wert 1.
also Call by Reference.
Der Fehler liegt sicher woanders.

mytar 10. Jul 2004 16:54

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Danke, wenn das die Hilfe sagt muss das ja stimmen.

mytar

mytar 11. Jul 2004 10:16

Re: Auf Dyn.Array klassenübergreifend zugreifen
 
Ich hatte folgendes Problem:

Delphi-Quellcode:
var
A, B: array of Integer;
begin
SetLength(A, 1);
A[0] := 1;
B := A;
SetLength(A, 1); //*
B[0] := 2;
end;
Ohne die mit * markiert Zeile hätte A[0] den Wert 2, so wie hier ist A[0] genau 1.

Ich muss nun wenn ich wiederum mit B auf A zugreifen will

Delphi-Quellcode:
B := A;
nach dem 2. SetLength einfügen.
Da ich in meinem Programm die Länge des Dynamischen Arrays öfterns, andere d.h. als nach jedem SetLength() von A muss ich die Zuweisung B := A durchführen.

Geht das auch irgendwie einfacher, oder muss ich mich mit diesem Problem bei dynamischen Arrays abfinden?

mytar


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:31 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