Hello!

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
                begin
                
PCurWidget^.widget:=PWidgetEntity(PCurWidget^.widget);
                end
                else
                begin
                
PCurWidget^.widget:=PWidgetContainer(PCurWidget^.widget);
                end;
                PCurWidget^.widget^.Render(); //line 88
                PCurWidget:=PCurWidget^.next;
                dispose(PHeadWidget);
                PHeadWidget:=PCurWidget;                
        end;
end;

Ron_W



__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail


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



The type cast actually does nothing at runtime, so the line

       PCurWidget^.widget:=PWidget(PCurWidget^.widget); //

does nothing.

Type casts are just to inform the compiler, at compile time, to accept a type for some variable or constant it would otherwise reject.

So, you have to typecast where you use it, i. e. -everywhere- you use it.

Instead of:


PCurWidget^.widget:=PWidget(PCurWidget^.widget); // if (PCurWidget^.widget^.meta = 'ENTITY') then //

try:

       if (PWidget(PCurWidget^.widget)^.meta = 'ENTITY') then //

Note: I don't see the definition of PWidget in your code peace. I assume it's a pointer to a record containing a string member named meta. But in your procedure

procedure AddWidget(PWidget:pointer);

you use the very same identifier, PWidget, for a variable name. That's a bit confusing.

hth,

Anton.



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

Reply via email to