Notice: Any messages purporting to come from this site telling you that your password has expired, or that you need to verify your details, confirm your email, resolve issues, making threats, or asking for money, are
spam. We do not email users with any such messages. If you have lost your password you can obtain a new one by using the
password reset link.
Entire forum
➜ SMAUG
➜ Compiling the server
➜ Array Element Type Problem - Smaug 1.4a
Array Element Type Problem - Smaug 1.4a
|
It is now over 60 days since the last post. This thread is closed.
Refresh page
Posted by
| Rash
United Kingdom (56 posts) Bio
|
Date
| Thu 10 Dec 2009 10:20 PM (UTC) |
Message
| OK I have by far the strangest problem I've ever encountered. Back in march this was compiling clean and without a problem. Just moved it to my new laptop running Cygwin and out pop's this error. The code in question hasn't been changed (Nothing has since March). Any clue's on what may of caused this and how to correct it?
Notes: Codebase is Smaug 1.4a, pretty heavily modified now.
Compile Errors:
make[1]: Entering directory `/home/talairina/src'
gcc -c -O -g3 -Wall -Wuninitialized -Dsmaug -DTIMEFORMAT act_comm.c
In file included from act_comm.c:32:
mud.h:3868: error: array type has incomplete element type
mud.h:3876: error: array type has incomplete element type
mud.h:3884: error: array type has incomplete element type
mud.h:3892: error: array type has incomplete element type
mud.h:3900: error: array type has incomplete element type
mud.h:3907: error: array type has incomplete element type
mud.h:3909: error: array type has incomplete element type
make[1]: *** [act_comm.o] Error 1
make[1]: Leaving directory `/home/talairina/src'
make: *** [all] Error 2
Lines in question are:
extern const struct weight_type weight_type_table[];
struct weight_type
{
char *weight_type_list[1];
};
/* height table */
extern const struct height_type height_type_table[];
struct height_type
{
char *height_type_list[1];
};
There are more, but all are vastly similar to the above segments.
All compile attempts were on Cygwin under Windows XP SP 3 (Cygwin release is 05 Dec 2009) and Windows 7 (Same Cygwin package). I also attempted this on my Ubuntu box but same error outputs (Ubuntu Linux 8.04.3). | Top |
|
Posted by
| Nick Gammon
Australia (23,120 posts) Bio
Forum Administrator |
Date
| Reply #1 on Thu 10 Dec 2009 11:08 PM (UTC) Amended on Thu 10 Dec 2009 11:09 PM (UTC) by Nick Gammon
|
Message
| I presume these are in different files as you are using extern. Or, if they are in the same file they are in that order.
The compiler cannot determine the size of the array:
extern const struct weight_type weight_type_table[];
This compiles and has a similar meaning:
extern const struct weight_type * weight_type_table;
Now all the compiler has to do is allocate space for a pointer. |
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Rash
United Kingdom (56 posts) Bio
|
Date
| Reply #2 on Fri 11 Dec 2009 02:36 PM (UTC) |
Message
| What would cause the compiler to give since an error now and not before? I can't seem to get it working at all even with the changes noted above by yourself Nick. (I may be missing something needing done here?)
I just can't wrap my head around why it would give such an error now, months after its been compiled cleanly with the strucs been set like that. | Top |
|
Posted by
| Hanaisse
Canada (114 posts) Bio
|
Date
| Reply #3 on Fri 11 Dec 2009 03:33 PM (UTC) |
Message
| Odd structs aside, if your code hasn't changed has your Cygwin changed? Perhaps some updates have made Cygwin more rigid thus noticing the errors now. |
aka: Hana
Owner in Training of: Fury of the Gods
alm-dev.org:4000 | Top |
|
Posted by
| David Haley
USA (3,881 posts) Bio
|
Date
| Reply #4 on Fri 11 Dec 2009 06:39 PM (UTC) |
Message
| Yes, there was most likely a compiler upgrade, causing it to be more strict about these things. |
David Haley aka Ksilyan
Head Programmer,
Legends of the Darkstone
http://david.the-haleys.org | Top |
|
Posted by
| Nick Gammon
Australia (23,120 posts) Bio
Forum Administrator |
Date
| Reply #5 on Fri 11 Dec 2009 07:16 PM (UTC) Amended on Fri 11 Dec 2009 07:17 PM (UTC) by Nick Gammon
|
Message
|
Rash said:
I just can't wrap my head around why it would give such an error now, months after its been compiled cleanly with the strucs been set like that.
If you Google your error message you will find you are not the only one. "But ... it used to work!" is a common theme.
The compiler has tightened up its checks. It now refuses to allocate an array of somethings when it doesn't know what size they are.
This code compiled OK for me:
struct weight_type
{
char *weight_type_list[1];
};
extern const struct weight_type weight_type_table[];
int main ()
{
return 0;
}
So you may solve your problem by including a .h file that defines what weight_type is, then the extern definition to an array of weight_type can be processed.
|
- Nick Gammon
www.gammon.com.au, www.mushclient.com | Top |
|
Posted by
| Rash
United Kingdom (56 posts) Bio
|
Date
| Reply #6 on Sun 13 Dec 2009 11:25 AM (UTC) |
Message
| After some digging, it does indeed seem like Cygwin has been updated with tighter checks. Guess that means I'll be ding a lot of debugging =) At least I'll learn to write much cleaner code.
I'll have to look in to your solution Nick once back on the *nix box. | Top |
|
Posted by
| Huxlay
(1 post) Bio
|
Date
| Reply #7 on Fri 06 Aug 2010 11:08 AM (UTC) |
Message
| Thanks for you information i newly join and your post help me.
|
Huxlay | Top |
|
The dates and times for posts above are shown in Universal Co-ordinated Time (UTC).
To show them in your local time you can join the forum, and then set the 'time correction' field in your profile to the number of hours difference between your location and UTC time.
26,458 views.
It is now over 60 days since the last post. This thread is closed.
Refresh page
top