[fpc-pascal]Linked List/ pointers/ casting/ OOP Question

Michael.VanCanneyt at Wisa.be Michael.VanCanneyt at Wisa.be
Sat Jul 10 01:23:11 CEST 2004


On Fri, 9 Jul 2004, Ron Weidner wrote:

> I thought I was getting closer to understanding
> pointers but it appears that I'm still not getting it.
>  I wrote the following code fragment but it doesn't
> compile.  the errors I get are...
> 
> Widget_container_class.pas(80,27) Error: Illegal
> qualifier
> Widget_container_class.pas(88,23) Error: Illegal
> qualifier
> Widget_container_class.pas(88,29) Error: Illegal
> expression
> Widget_container_class.pas(88,29) Fatal: Syntax error,
> ";" expected but "(" found
> 
> I numbered lines 80 and 88 in comments so that the
> error messages make sense.  (to the experienced
> programmer like yourself :) )Please let me know if you
> see what the problems are.  
> 
> {$H+}
> unit Widget_container_class;
> interface
> uses
> Attribute_class,Widget_class,Widget_entity_class,web;
> type PWidgetList=^TWidgetList;
> TWidgetList=record
> 	widget:pointer;
> 	next:PWidgetList;
> end;
> 
> type PWidgetContainer=^TWidgetContainer;
> TWidgetContainer=Object(TWidget)
> 	private 
> 		PCurWidget,PHeadWidget:PWidgetList;
> 		text:string;
> 	public	
> 		constructor init(ATag:string);	
> 		procedure Render();
> 		procedure SetText(str:string);
> 		function GetText():string;	
> 		procedure MoveFirstWidget();
> 		procedure MoveLastWidget();
> 		procedure AddWidget(PWidget:pointer);
> 		procedure RenderWidgets();
> end;
> 
> procedure TWidgetContainer.RenderWidgets();
> begin
> 	MoveFirstWidget();
> 	while (PCurWidget^.next <> nil) do
> 	begin
> 		PCurWidget^.widget:=PWidget(PCurWidget^.widget); // cast the pointer to a widget pointer
> 		if (PCurWidget^.widget^.meta = 'ENTITY') then // this is line 80

At first glance, this should read 
  PwidgetSomething(PCurWidget^.widget)^.meta = 'ENTITY'
because widget is an untyped pointer ?

And the same for the other line ?

Michael.




More information about the fpc-pascal mailing list