Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit TQue (https://www.delphipraxis.net/41224-problem-mit-tque.html)

Skyrunner2 28. Feb 2005 00:08


Problem mit TQue
 
Warum bekomme ich die fehlermeldung (siehe quellcode)??
Delphi-Quellcode:
procedure Tmaze.PrimGenerator;
var //[..]
    FieldID:Tpoint;
    Q:TQueue;

begin
       //Prepare Maze Memory Image
       //[..]

       //init Algorithm
       randomize;
       FieldID.x:=random(width);//integer für Labyrinth(maze) Zellen koordinaten
       FieldID.y:=random(Height);//integer für Labyrinth(maze) Zellen koordinaten

       q.Create;
       q.Push(addr(FieldID));

       //So hier nur mal zum testen
       //Will ich top von Q (q.pop) wieder unter FieldID Speicher.
       //Bin mir aber nie sicher wo das dumme ^ding hinkommt - also eigentlich schon klar, aber bekomme fehler meldung:
     

       FieldID:=q.Pop^;
       //[Error] MazeClass.pas(291): Incompatible types: 'TPoint' and 'procedure, untyped pointer or untyped parameter'

hmm ich hoffe die kommentare im quelltext genügen wenn nicht bitte sagen!

Robert_G 28. Feb 2005 00:23

Re: Problem mit TQue
 
Du musst ihm schon sagen, als was er den Zeiger aus Pop benutzen soll. ;)

Delphi-Quellcode:
...
   queue.Push(@Field);
...
   Field := TPoint(queue.Pop^);

Basilikum 28. Feb 2005 00:31

Re: Problem mit TQue
 
oha.... dies wird so krachen.....

vermutlich wird der Stack, auf dem FieldID zum Zeitpunkt von Push gelegen hat, zum Zeitpunkt von Pop nicht mehr existieren...
ein Pointer in's nichts also....

deshalb besser so:
Delphi-Quellcode:
var
  FieldID : PPoint;
  q : TQueue;
begin
// ...

  new(FieldID);
  FieldID^.X:=...
  FieldID^.Y:=...

  q.push(FieldID);

//  ... später ...


  FieldID:=q.pop();
  ... FieldID^.X ...
  dispose(FieldID);

// ...
end;

Muetze1 28. Feb 2005 00:59

Re: Problem mit TQue
 
Moin!

Ich sehe erstmal das Problem beim anlegen der TQueue Instanz - es ist der gleiche Fehler wie vorhin, nicht Skyrunner2?

Delphi-Quellcode:
       q.Create;
q ist eine Variable und muss die Instanz zugewiesen bekommen - diese erhälst du vom Konstruktor, welchen du mit KlassenName.Create aufrufst.

Also sollte es so lauten:

Delphi-Quellcode:
       q := TQueue.Create;
MfG
Muetze1

Skyrunner2 28. Feb 2005 09:28

Re: Problem mit TQue
 
Zitat:

Zitat von Muetze1
Moin!

Ich sehe erstmal das Problem beim anlegen der TQueue Instanz - es ist der gleiche Fehler wie vorhin, nicht Skyrunner2?

Delphi-Quellcode:
       q.Create;
q ist eine Variable und muss die Instanz zugewiesen bekommen - diese erhälst du vom Konstruktor, welchen du mit KlassenName.Create aufrufst.

Also sollte es so lauten:

Delphi-Quellcode:
       q := TQueue.Create;
MfG
Muetze1

jo...
*an stirn klopf*ach ja... :oops:


was lernen wir:? nie zu lange aufbleiben... dann kommen nur noch dumme fehler!

habs jetzs so wie das Basilikum vogeschlagen hat gelöst..

danke!


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