[luau] C struct interdependency problem

Dan George linuxdan at hawaii.rr.com
Sun Jun 23 15:28:00 PDT 2002


Im running Visual Basic .NET now and plan on getting my MCSD as well.  Im
not WIN happy but it doesnt hurt to have programming experience that can
crossover to any Unix platform.
----- Original Message -----
From: "Ray Strode" <halfline at hawaii.rr.com>
To: <luau at videl.ics.hawaii.edu>
Sent: Saturday, June 22, 2002 2:00 AM
Subject: Re: [luau] C struct interdependency problem


> Hi Craig.
>
> Thanks for answering.
>
> >    As always one wonders... well what are you really trying to do... why
> >not use C++ for such a structure is what I wonder.  But if it's because
you
> >prefer C or whichever.
> >
> Yes, I like C more than C++.  C++ adds some features that facilitate OO
> programming, but there are some things
> I don't like about it (I could go into it if you like, but it's not
> particularly relevant, so I'm not doing it in this message).
>
> >Also I wonder why you want the syntax syle of
> >
> >typedef struct Object Object... it's more common to create like this:
> >
> Actually my code doesn't have that.  I normally do:
>
> typedef struct {
>  ...
> } Object;
>
> (note the anonymous tag)
>
> I just did it in my examples because I figured it would be easier to
> rearrange things if they were separate.  Adding _t
> suffix is pretty common, I know.  It's all issues of style anyway,
> though.  Everyone has their own.
>
> >ObjectError
> >Object
> >Error
> >LinkedList/Stack (I'm assuming the stack.h file that has LinkedList means
> >that Stack is a LinkedList and it's a small typo)
> >
> Oh, quite right, sorry...two files.  linkedlist.h and stack.h
>
> struct LinkedLinked { Object super_class; }
>
> and
>
> struct Stack { LinkedList super_class; }
>
> >The thing I'm looking at that might "not work out" is that you want
Object
> >to have an Error member, and Error is a "subclass" of Object.  The
> >definition you show cannot compile because when you create an Object you
> >declare an Object (which has an Object (which has an Object (and so on)
> >member) member as a member, so it is being told to have declare an
infinite
> >number of Objects to declare a single object.  You need to defer this
> >declaration with a pointer instead of a reference declaration so you can
> >create the member at runtime dynamically.
> >
> I'm not following you here.  The error member of my Object /is/ a
> pointer to (a subclass of) an Error object.
> So my Object is (indirectly) composed of an Object, but it's a pointer
> to an object (Just like with a linked list or
> any other data structure composed of itself).
>
> >The place to make this indirection is the ObjectError member (the way you
> >have it set up).  So I have that as a pointer to ObjectError (ObjectError
> >*pError).  (see below).
> >
> ...
>
> >object.h
> >-----
> >#include "ObjectError";
> >
> >typedef struct Object_t
> >{
> >    ObjectError *pError;
> >    ...
> >}
> >
> isn't that what i'm doing in my example? (I mean other than small
> stylistic differences).
> One difference is i'm maintaing Object and ObjectError in the same file.
>
> >Hope this makes sense and is helpful.  It gets involved quick, feel free
to
> >ask me to explain something I've said, I didn't want to go off on too
many
> >tangents (I already added in C++!).
> >
> >
> Thanks for the quick response.  I think we may have miscommunicated
> slightly, though (Partly because of my
> rather large typo between the LinkedList and Stack, I'm sure).
>
> Just to clear everything up, this is my definition for Object again.
>
> >>struct Object {
> >>   ObjectError *error;
> >>   ...
> >>};
> >>
> And here is my tree.  I suppose the confusion could have arose from me not
> putting ObjectError * in the box.  That was a conscious decision, but in
> hind sight I could see how it could be confusing.
>
> Anyway, eager to here your input.
>
> >>+-----Object-----+<----+
> >>|/////has-a://///|     |
> >>|//////...///////|     |
> >>|//ObjectError///|     |
> >>|//////...///////|     |
> >>+----------------+     |
> >>        +--------------+
> >>        |
> >>        .
> >>+---LinkedList---+<----+
> >>|/////has-a://///|     |
> >>|//////...///////|     |
> >>+----------------+     |
> >>        +--------------+
> >>        |
> >>        .
> >>+-----Stack------+<----+
> >>|/////has-a://///|     |
> >>|//////...///////|     |
> >>+----------------+     |
> >>        +--------------+
> >>        |
> >>        .
> >>+--ObjectError---+
> >>|/////has-a://///|
> >>|//////...///////|
> >>+----------------+
> >>
> >>
> Thanks,
> --Ray
>
> _______________________________________________
> LUAU mailing list
> LUAU at videl.ics.hawaii.edu
> http://videl.ics.hawaii.edu/mailman/listinfo/luau




More information about the LUAU mailing list