Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Private Variable "verweigert Zutritt" (https://www.delphipraxis.net/163259-private-variable-verweigert-zutritt.html)

Luckie 22. Sep 2011 00:43

AW: Private Variable "verweigert Zutritt"
 
In jeder Sprache brauchst du einen Konstruktor.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Augen: Integer;
begin
  FWuerfel.Werfen;
  Augen := FWuerfel.Augen;
  case Augen of
    1: // mach was hier;
    2: // mach was hier;
    3: // mach was hier;
    4: // mach was hier;
    5: // mach was hier;
    6: // mach was hier;
  end;
end;

hoika 22. Sep 2011 06:29

AW: Private Variable "verweigert Zutritt"
 
Hallo,

da du c++ erwähnst.
YSo wie du es hier geschrieben hast, sind es globale Variablen.
Bei lokalen würde c++ die Klassen selber erzeugen

class TWuerfel
{
}

void TuWas()
{
TWuerfel Wuerfel[3];
}


In Delphi sind Klassen immer Pointer, etwas so (mein c++ ist etwas eingerostet)
Du hast also ein Array von TWuerfel-Pointern angelegt.
Due Array muss auch wieder freigeben werden (In Delphi Wuerfel[0].Free) !

void TuWas()
{
TWuerfel* Wuerfel[3];
}

Du muss also erst Instancen erzeugen

new Wuerfel[0] (oder so ähnlich)


etwas einfacher ist es in Delphi mit dynamic arrays


Wuerfel: array of TWuerfel;

Initialisierung

SetLength(Wuerfel,3)
Wuerfel[0]
Wuerfel[1]
Wuerfel[2]

In paar Hilfsfunktionen
Low(Wuerfel) -> 0
High(Wuerfel) -> 2

Freigabe
Wuerfel:= NIL;



Heiko

Ralf Kaiser 22. Sep 2011 06:51

AW: Private Variable "verweigert Zutritt"
 
Zitat:

Zitat von hoika (Beitrag 1125934)
etwas einfacher ist es in Delphi mit dynamic arrays

Wuerfel: array of TWuerfel;

Initialisierung

SetLength(Wuerfel,3)
Wuerfel[0]
Wuerfel[1]
Wuerfel[2]

In paar Hilfsfunktionen
Low(Wuerfel) -> 0
High(Wuerfel) -> 2

Freigabe
Wuerfel:= NIL;

AUTSCH!! :wall:

Auch bei dynamischen Arrays müssen die Instanzen erzeugt werden!

Initialisierung:

Delphi-Quellcode:
SetLength(Wuerfel,3)
Wuerfel[0] := TWuerfel.Create;
Wuerfel[1] := TWuerfel.Create;
Wuerfel[2] := TWuerfel.Create;
Freigabe:

Delphi-Quellcode:
Wuerfel.Free;
Eine Freigabe durch die Zuweisung von NIL erfolgt nur wenn es sich um ein Interfaces handelt!!!

himitsu 22. Sep 2011 08:21

AW: Private Variable "verweigert Zutritt"
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1125936)
Freigabe:

Delphi-Quellcode:
Wuerfel.Free;
Eine Freigabe durch die Zuweisung von NIL erfolgt nur wenn es sich um ein Interfaces handelt!!!

Dynamische Arrays und Free?

Delphi-Quellcode:
Wuerfel := nil;
oder
Delphi-Quellcode:
SetLength(Wuerfel, 0);
, wobei Delphi dynamische Arrays auch automatisch freigibt, genauso wie die Interfaces.
Aber die TWuerfel-Instanzen müssen vorher noch freigegeben werden
Delphi-Quellcode:
Wuerfel[i].Free;
(am Einfachsten in einer Schleife, welche das Array durchgeht)

PS: Genau deswegen hat man die Delphi-Referenz durchsuchenTObjectList erfunden, da sie sich um die Freigabe kümmern kann.

Luckie 22. Sep 2011 09:01

AW: Private Variable "verweigert Zutritt"
 
Was ich in meinem Beispiel vergessen habe, ist das Freigeben der Instanz mit Free.

Ralf Kaiser 22. Sep 2011 09:02

AW: Private Variable "verweigert Zutritt"
 
(Diesmal für mich: AUTSCH!!!)

Natürlich meinte ich
Delphi-Quellcode:
Wuerfel[0].Free
!!

hoika 22. Sep 2011 20:28

AW: Private Variable "verweigert Zutritt"
 
Hallo,

klar muss das Wuerfel[i] erzeugt werden ;(
ich war auf Records aus.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.
Seite 2 von 2     12   

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