Delphi-PRAXiS

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

TheAn00bis 6. Mär 2006 16:53


typecasting Problem
 
Hey, folgender Code funktioniert:

Delphi-Quellcode:
procedure TForm_Rangierbahnhof.Button1Click(Sender: TObject);
var a,b: Twaggon;
  gleis1: keller;
begin      
  a:=twaggon.init(1);
  gleis1.push(a);
  b:=twaggon(gleis1.pop);
end;
Dieser, der den einzigen Unterschied hat, dass Gleis1 aus "Gleis" und "1" zusammengesetzt ist, verursacht eine Access Violation:

Delphi-Quellcode:
procedure TForm_Rangierbahnhof.Button1Click(Sender: TObject);
var a,b: Twaggon;
  i: integer;
  gleis1: keller;
begin
  i:=1;
  a:=twaggon.init(1);
  gleis1.push(a);
  b:=twaggon(keller('gleis'+inttostr(i)).pop); //Access Violation
end;

Die Klasse "Keller" ist eine lineare Liste. Dabei fügt die Methode "push" an das Ende ein Element vom Typ TObject an und "pop" übergibt das Element am Ende und löscht es aus der Liste.


Also: wo ist der Un terschied zwischen twaggon(keller('gleis'+inttostr(i)).pop); und twaggon(gleis1.pop);? Bzw. was ist an Code 2 falsch?

JasonDX 6. Mär 2006 17:20

Re: typecasting Problem
 
Zitat:

Zitat von TheAn00bis
Also: wo ist der Un terschied zwischen twaggon(keller('gleis'+inttostr(i)).pop); und twaggon(gleis1.pop);? Bzw. was ist an Code 2 falsch?

Schau dir deinen Code nochmal an:
Wo liegt der unterschied?
Delphi-Quellcode:
twaggon(keller('gleis1').pop);
//vs.
twaggon(gleis1.pop);
du castest einen string auf den Typ keller. Das kann doch nicht gutgehn, oder ;)

greetz
Mike

TheAn00bis 6. Mär 2006 17:26

Re: typecasting Problem
 
Du hast Recht...

Also muss ich die Gleise in ein Array packen, oder? Sowas wie FindCompnent gibts nicht für Objekte, oder?

JasonDX 6. Mär 2006 17:33

Re: typecasting Problem
 
Zitat:

Zitat von TheAn00bis
Also muss ich die Gleise in ein Array packen, oder? Sowas wie FindCompnent gibts nicht für Objekte, oder?

Ob du die Objekte mit FindComponent findest hängt von der Deklaration und davon ab, wie du sie erstellst, aber ich wage es zu bezweifeln. Wenn du mehrere Objekte eines Typs hast, die du über Indexe ansprechen willst, wäre ein Array echt die Ideale Lösung.

greetz
Mike


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