Erik Hofman wrote:
> While compiling on IRIX I get the following error:
> [...]
> To be honnest I'm not quite sure what you're trying to do here.

The hash table needs two blocks allocated: one to hold the table nodes
and one to hold the top-level table of "column" pointers.  For
efficiency, it packs them together into a single malloc'ed block.  The
standard type rules don't like this, so you end up doing a lot of
casting.

> error(1138): expression must have pointer-to-object type
>      h->table = ((void*)h->nodes) + sz*sizeof(struct HashNode);

Maybe it doesn't like the arithmetic on a void* (if a language guru
knows whether you can add to a void*, please speak up).  Try changing
it to a char* and see if that fixes this one.

I believe (but will have to look it up) that your compiler is
incorrectly complaining about the assignment from void* to struct
HashNode**.  I'm pretty sure this is legal in C, for purposes exactly
like this one.  But casts are easy to add.

> Changing it to the following solves the problem:
>     h->table = ((struct HashNode*)h->nodes) + sz*sizeof(struct HashNode);
>
> But it does trigger another problem:
>   line 23: warning(1515): a value of type
>       "struct HashNode *" cannot be assigned to an entity of type
>       "struct HashNode **"

This one makes perfect sense.  Because the type of h->table is a
"struct HashNode**", but you put a case in saying that it was a
"struct HashNode*".  Regardless, doing this is a bug.  Arithmetic on
pointers in both C and C++ works in units of the structure size.  That
line is trying to add a number of bytes to the base address of the
block to get a new address; your code adds that many structure sizes.

Instead, try this as a more verbose variant and see if it works.  It
adds an explicit cast to the type of the table, and uses a char* to
get around the original error:

h->table = (struct HashNode**)(((char*)h->nodes) + sz*sizeof(struct
HashNode));

Andy



_______________________________________________
Flightgear-devel mailing list
[EMAIL PROTECTED]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel

Reply via email to