Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Werte an Objekt übergeben (https://www.delphipraxis.net/76452-werte-objekt-uebergeben.html)

Martin.Ghosts 4. Sep 2006 19:41


Werte an Objekt übergeben
 
Hallo erst mal an alle,

ich möchte Werte an ein selbst erstelltes Objekt über eine Procedure übergeben.

eigene Klasse:
Delphi-Quellcode:
type
  TRoom = class
    Description: String;
    Norden, Osten, Sueden, Westen: TRoom;
    procedure SetAusgaenge (norden, osten, sueden, westen: TRoom);
  end;
aufrufen der Procedure:
Delphi-Quellcode:
procedure TForm1.CreateComputerRoom;
begin
  Computerraum:= TRoom.Create;
  Computerraum.Description:= ('Du stehst im Computerraum!');
  Computerraum.SetAusgaenge(Kueche, nil, nil, nil);
end;
Procedure:
Delphi-Quellcode:
procedure TRoom.SetAusgaenge(norden, osten, sueden, westen: TRoom);
begin
  self.Norden:= norden;
  self.Osten:= osten;
  self.Sueden:= sueden;
  self.Westen:= westen;
end;
Das Problem ist folgendes, dass in diesem Fall Computerraum.Norden = nil ist obwohl er eigendlich = Kueche sein sollte. Habe schon mal gestern eine Stunde versucht, einen Fehler zu finden und heute einfach nochmal den Quelltext neu getippt, aber ohne Erfolg.
Kann jemand einen Fehler von mir erkennen?

Vielen Dank schon mal, Martin.Ghosts

DGL-luke 4. Sep 2006 19:44

Re: Werte an Objekt übergeben
 
Ist denn vielleicht Kueche = nil? ;)

Martin.Ghosts 4. Sep 2006 20:06

Re: Werte an Objekt übergeben
 
:?: Inwiefern kann Kueche = nil sein? Kueche ist doch nur der Name eines gleichen Objektes mit den Attributen Norden, Osten, Sueden, Westen, die als Zeiger funktionieren. Meiner Meinug nach können nur diese = nil sein.(?)
Delphi-Quellcode:
procedure TForm1.CreateKitchen;
begin
  Kueche:= TRoom.Create;
  Kueche.Description:= ('Du stehst in der Küche!');
  Kueche.SetAusgaenge(nil, nil, Kueche, nil);
end;


procedure TForm1.CreateTeacherRoom;
begin
  Lehrerzimmer:= TRoom.Create;
  Lehrerzimmer.Description:= ('Du stehst im Lehrerzimmer!');
  Lehrerzimmer.SetAusgaenge(Lehrerzimmer, nil, Computerraum, nil);
end;

3_of_8 4. Sep 2006 20:10

Re: Werte an Objekt übergeben
 
Wenn du CreateComputerRoom vor CreateKitchen aufrufst, dann ist Kueche undefiniert und zeigt auf eine ungültige Speicherstelle.

Muetze1 4. Sep 2006 20:31

Re: Werte an Objekt übergeben
 
Zitat:

Zitat von 3_of_8
Wenn du CreateComputerRoom vor CreateKitchen aufrufst, dann ist Kueche undefiniert und zeigt auf eine ungültige Speicherstelle.

Bzw. wenn die Variable Kueche eine globale Variable ist oder in einer Klasse definiert ist (z.B. deine Form), dann ist diese sogar Nil und nicht undefiniert.

Du gibst bei dem Aufruf nur die in der Variable enthaltenen Instanz weiter. Wenn du keine Instanz erzeugst und der Variablen zuweist, dann ist diese uninitialisiert. Abhängig von ihrem Deklarationsort enthält sie Nil oder einen zufälligen Wert.

Martin.Ghosts 4. Sep 2006 20:44

Re: Werte an Objekt übergeben
 
So, Fehler gefunden. Ich hatte Kueche, Lehrerzimmer noch nicht erzeugt(wie 3_of_8 sagte). Ein absolut beknackter Fehler, aber ich glaube, ich hätte noch lange nach ihm gesucht. Tja, aus Fehlern lehrnt man ja bekanntlich :wink:
Nochmal vielen Dank.


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