AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Auf Dyn.Array klassenübergreifend zugreifen

Auf Dyn.Array klassenübergreifend zugreifen

Ein Thema von mytar · begonnen am 10. Jul 2004 · letzter Beitrag vom 11. Jul 2004
Antwort Antwort
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#1

Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 09:23
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;
Francis Obikwelu
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 09:44
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;
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#3

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 10:00
Braucht es die Pointer Deklaration uebhaupt, das dyn. Array (Array of Integer)
besteht ja aus Pointern?
Francis Obikwelu
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 10:23
Lieber ein Pointer zu viel als einer zu wenig. Probiers doch einfach aus.
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 11:36
Moin!

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

MfG
Muetze1
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 16:14
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
Francis Obikwelu
  Mit Zitat antworten Zitat
aogwaba

Registriert seit: 21. Aug 2003
16 Beiträge
 
#7

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 16:47
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.
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 10. Jul 2004, 16:54
Danke, wenn das die Hilfe sagt muss das ja stimmen.

mytar
Francis Obikwelu
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#9

Re: Auf Dyn.Array klassenübergreifend zugreifen

  Alt 11. Jul 2004, 10:16
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

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
Francis Obikwelu
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:38 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