Ron Weidner a écrit :
> 
> 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

The previous line is useless. It just sets widget with the value it 
already has and it does not change the fact that widget is an untyped 
pointer.

You should rather use
          if PWidget(PCurWidget^.widget)^.meta = 'ENTITY' then 

instead of the following line

>                 if (PCurWidget^.widget^.meta = 'ENTITY') then //
> this is line 80
>                 begin
> 
> PCurWidget^.widget:=PWidgetEntity(PCurWidget^.widget);
>                 end
>                 else
>                 begin
> 
> PCurWidget^.widget:=PWidgetContainer(PCurWidget^.widget);
>                 end;
>                 PCurWidget^.widget^.Render(); //line 88

idem, use    PWidget(PCurWidget^.widget)^.Render();

>                 PCurWidget:=PCurWidget^.next;
>                 dispose(PHeadWidget);
>                 PHeadWidget:=PCurWidget;
>         end;
> end;

-- 
mm
http://www.ellipsa.net/

_______________________________________________
fpc-pascal maillist  -  [EMAIL PROTECTED]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to