error: array type has incomplete element type

I’m trying to build the uIP/webserver demo for the LPCXpresso1768/9; I’ve built a Code Red FreeRTOS skeleton project and then included the webserver src directory from the FreeRTOSv7.01 Demo tree. In httpd-fsdata.c, the structure static const char data_404_html = {
/* /404.html */
0x2f, 0x34, 0x30, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0,
0x3c, 0x68, 0x74, 0x6d, 0x6c, 0x3e, 0xa, 0x20, 0x20, 0x3c,
0x62, 0x6f, 0x64, 0x79, 0x20, 0x62, 0x67, 0x63, 0x6f, 0x6c,
0x6f, 0x72, 0x3d, 0x22, 0x77, 0x68, 0x69, 0x74, 0x65, 0x22,
0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x63, 0x65, 0x6e,
0x74, 0x65, 0x72, 0x3e, 0xa, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x3c, 0x68, 0x31, 0x3e, 0x34, 0x30, 0x34, 0x20, 0x2d,
0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x6f, 0x74, 0x20,
0x66, 0x6f, 0x75, 0x6e, 0x64, 0x3c, 0x2f, 0x68, 0x31, 0x3e,
0xa, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x68, 0x33,
0x3e, 0x47, 0x6f, 0x20, 0x3c, 0x61, 0x20, 0x68, 0x72, 0x65,
0x66, 0x3d, 0x22, 0x2f, 0x22, 0x3e, 0x68, 0x65, 0x72, 0x65,
0x3c, 0x2f, 0x61, 0x3e, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65,
0x61, 0x64, 0x2e, 0x3c, 0x2f, 0x68, 0x33, 0x3e, 0xa, 0x20,
0x20, 0x20, 0x20, 0x3c, 0x2f, 0x63, 0x65, 0x6e, 0x74, 0x65,
0x72, 0x3e, 0xa, 0x20, 0x20, 0x3c, 0x2f, 0x62, 0x6f, 0x64,
0x79, 0x3e, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c, 0x3e,
0}; referenced by const struct httpd_fsdata_file file_404_html = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) – 10, 0}}; gives me the error ../src/httpd-fsdata.c:544:32: error: array type has incomplete element type which utterly baffles me. A number of people seem to be experiencing similar errors with gcc 4.x based tools, but I find nothing that may help with this particular issue. LPCXpresso LPC1769, LPCXpresso 4 tools, FreeRTOS v7.01. Ideas? Thanks, Mike

error: array type has incomplete element type

…and when I include httpd-fsdata.h, I lose the /src/httpd-fsdata.o:(.rodata.file_404_html+0x0): multiple definition of `file_404_html’ but now I get ./src/httpd-fsdata.o:(.rodata.file_404_html+0x0): multiple definition of `file_404_html’
./src/httpd-fs.o:(.rodata.file_404_html+0x0): first defined here the declaration of httpd_fsdata_file in httpd_fsdata.h struct httpd_fsdata_file {
  const struct httpd_fsdata_file *next;
  const char *name;
  const char *data;
  const int len;
#ifdef HTTPD_FS_STATISTICS
#if HTTPD_FS_STATISTICS == 1
  u16_t count;
#endif /* HTTPD_FS_STATISTICS */
#endif /* HTTPD_FS_STATISTICS */
}; so it seems that the pointer in the first parameter is somehow being seen as a redeclaration? My head hurts. Any thoughts? Thanks, Mike

error: array type has incomplete element type

../src/httpd-fsdata.c:544:32: error: array type has incomplete element type
The clue is in the error message.  If you dig deep enough into the structures you will find that the line: const struct httpd_fsdata_file file_404_html = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) – 10, 0}}; only provides initialisers for the first n of the elements in the httpd_fsdata_file structure.  That is perfectly legal, and should generate a warning, not an error, unless you have turned on the “treat warnings as errors” compiler option.  I can’t remember exactly what to do to remove the warning, but I *think*, from memory, that just adding a 0 to the end of the init list will fix it.  Please check though, this is just from memory.
/src/httpd-fsdata.o:(.rodata.file_404_html+0x0): multiple definition of `file_404_html’
Don’t include httpd-fsdata.c in your build.  It is #included from another file already (probably fsdata.c) – hence building it explicitly means it is built twice, and all the structs it contains will therefore be defined twice. Treat the file as if it was a .h file, not a .c file.  I have no idea why it was given a .c extension when it is just #included as you would normally a .h. Regards.

error: array type has incomplete element type

<richard>The clue is in the error message.  If you dig deep enough into the structures you will find that the line: const struct httpd_fsdata_file file_404_html = {{NULL, data_404_html, data_404_html + 10, sizeof(data_404_html) – 10, 0}}; only provides initialisers for the first n of the elements in the httpd_fsdata_file structure.  That is perfectly legal, and should generate a warning, not an error, unless you have turned on the “treat warnings as errors” compiler option.  I can’t remember exactly what to do to remove the warning, but I *think*, from memory, that just adding a 0 to the end of the init list will fix it.  Please check though, this is just from memory.</richard> No, that didn’t help, and warnings are not treated as errors either. <richard>Don’t include httpd-fsdata.c in your build.  It is #included from another file already (probably fsdata.c) – hence building it explicitly means it is built twice, and all the structs it contains will therefore be defined twice. Treat the file as if it was a .h file, not a .c file.  I have no idea why it was given a .c extension when it is just #included as you would normally a .h.</richard> I did include the .h file; not the .c – it’s compiling the .c file that’s blowing up with the new gcc in LPCXpresso 4. and treating warnings as errors is definitely *not* set. Ideas?

error: array type has incomplete element type

I meant to add that httpd-fsdata.c is part of the build – it initializes all the page content. Was the Code Red demo app tested with LPCXpresso 3.x or 4?

error: array type has incomplete element type

it’s compiling the .c file that’s blowing up
Yes, exactly.  Do not compiler the C file – exclude it from the build.  Eclipse will just blindly build anything under the project directory unless you explicitly tell it not to.  That C file is already #included in another file and must not be built separately. Regards.