Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Typecast Problem


McC - Do 03.04.03 14:33
Titel: Typecast Problem

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type
  TNode=record
    next, prev: ^TNode;
    value: TObject;
  end;

  PNode: ^TNode;
 
 TLinkedList = class
    //werte etc
    first, last: PNode;
    //blabla
end;


so in etwa sieht die Listendefinition aus, die funktioniert so weit auch. Aber dann, in ner anderen Unit:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure DrawFunction1(Werte: TMesswerte);
var Cursor_Messreihe: PNode; //Cursor zur Angabe der betrachteten Messreihe
    Cursor_Messwerte: PNode; //Cursor zum Auslesen der Messwerte in einer Messreihe
    punkt:TMesspunkt;
begin
  Cursor_Messreihe := Werte.Daten.first;
  while Cursor_Messreihe <> nil do begin
    Cursor_Messwerte := TDoubleLinkedList(Cursor_Messreihe^.value).first;
    Punkt := TMessPunkt(Cursor_Messwerte^.value);
    while Cursor_Messwerte <> nil do begin


Der Typecast auf TDoubleLinkedList klappt, der auf TMessPunkt aber nicht. Hat jemand ne Idee woran das liegen kann??


maximus - Do 03.04.03 14:37

Hi.

Quelltext
1:
Punkt := TMessPunkt(Cursor_Messwerte^.value);                    

Cursor_Messwerte ist ja auch vom typ PNode...ergo kein wunder, dass er es mit TMessPunkt nicht will!

Edit: Vielleicht postest du mal die deklaration der anderen typen!


AndyB - Do 03.04.03 17:27

Eine bessere Lösung, bei der du dir die Typecasterei sparen kannst ist folgende:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
type
  TLinkedList = class; // forward declaration

  PNode = ^TNode; 
  TNode = record 
    next, prev: PNode; 
    value: TLinkedList; 
  end; 

  TLinkedList = class 
    //werte etc 
    first, last: PNode; 
    //blabla 
  end;


McC - Fr 04.04.03 13:11

maximus hat folgendes geschrieben:
Hi.

Quelltext
1:
Punkt := TMessPunkt(Cursor_Messwerte^.value);                    

Cursor_Messwerte ist ja auch vom typ PNode...ergo kein wunder, dass er es mit TMessPunkt nicht will!


Ja, Cursor_Messwerte ist vom Typ PNode, aber Cursor_Messwerte^.value ist doch TObject oder nicht?

@AndyB: Wenn ich den Wert der Listenobjekte vom Typ der Liste definiere bekomme ich ja nie Daten am Ende. Das ganz soll ja so aussehen, dass man in diesem Fall quasi zwei verschachtelte Listen hat, also eine Liste von Listen, und in diesen Listen dann Werte vom Typ TMesspunkt...