Andrew Ely
Andrew Ely

Reputation: 9

array type has incomplete element type error

I'm trying to compile a program and am fairly inexperienced (teaching myself as I go). The one thing i'm struggling with is this:

overland.h:62:37: error: array type has incomplete element type ‘struct sect_color_type’

extern const struct sect_color_type sect_show[];

const struct sect_color_type sect_show[] = {
/*   Sector Type        Color   Symbol Description  Passable?   Move  R  G  B   */

{ SECT_INDOORS,       "&x", " ", "indoors",         FALSE,  1,  0, 0, 0 },
{ SECT_CITY,         "&Y", ":", "city",         TRUE,   1,      255, 128, 64 },
{ SECT_FIELD,        "&G", "+", "field",        TRUE,   1,  141, 215, 1 },
{ SECT_FOREST,       "&g", "+", "forest",       TRUE,   2,  0, 108, 47 },
{ SECT_HILLS,        "&O", "^", "hills",        TRUE,   3,  140, 102, 54 },
{ SECT_MOUNTAIN,     "&w", "^", "mountain",     TRUE,   5,  152, 152, 152 },
{ SECT_WATER_SWIM,   "&C", "~", "shallow water",    TRUE,   2,  89, 242, 251 },
{ SECT_WATER_NOSWIM, "&B", "~", "deep water",   TRUE,   2,  67, 114, 251 },
{ SECT_AIR,          "&x", "?", "air",      FALSE,  1,  0, 0, 0 },
{ SECT_UNDERWATER,   "&x", "?", "underwater",   FALSE,  5,  0, 0, 0 },
{ SECT_DESERT,       "&Y", "~", "desert",       TRUE,   3,  241, 228, 145 },
{ SECT_RIVER,        "&B", "~", "river",        TRUE,   3,  0, 0, 255 },
{ SECT_OCEANFLOOR,   "&x", "?", "ocean floor",  FALSE,  4,  0, 0, 0 },
{ SECT_UNDERGROUND,  "&x", "?", "underground",  FALSE,  3,  0, 0, 0 },
{ SECT_JUNGLE,       "&g", "*", "jungle",       TRUE,   2,  70, 149, 52 },
{ SECT_SWAMP,        "&g", "~", "swamp",        TRUE,   3,  218, 176, 56 },
{ SECT_TUNDRA,       "&C", "-", "tundra",       TRUE,   2,  54, 255, 255 },
{ SECT_ICE,          "&W", "=", "ice",      TRUE,   3,  133, 177, 252 },
{ SECT_OCEAN,        "&b", "~", "ocean",        FALSE,  1,  0, 0, 128 },
{ SECT_LAVA,         "&R", ":", "lava",         FALSE,  2,  245, 37, 29 },
{ SECT_SHORE,        "&Y", ".", "shoreline",    TRUE,   3,  255, 255, 0 },
{ SECT_TREE,         "&g", "^", "impass forest",    FALSE,  10, 0, 64, 0 },
{ SECT_STONE,        "&W", "^", "impas mountain", FALSE,    10, 128, 128, 128 },
{ SECT_QUICKSAND,    "&g", "%", "quicksand",    FALSE,  10,     128, 128, 0 },
{ SECT_WALL,         "&P", "I", "wall",         FALSE,  10, 255, 0, 255 },
{ SECT_GLACIER,      "&W", "=", "glacier",      FALSE,  10,     141, 207, 244 },
{ SECT_EXIT,         "&W", "#", "exit",         TRUE,   1,  255, 255, 255 },
{ SECT_TRAIL,        "&O", ":", "trail",        TRUE,   1,  128, 64, 0 },
{ SECT_BLANDS,   "&r", ".", "blasted lands",    TRUE,   2,  128, 0, 0 },
{ SECT_GRASSLAND,    "&G", ".", "grassland",    TRUE,   1,  83, 202, 2 },
{ SECT_SCRUB,        "&g", ".", "scrub",        TRUE,   2,  123, 197, 112 },
{ SECT_BARREN,       "&O", ".", "barren",       TRUE,   2,  192, 192, 192 },
{ SECT_BRIDGE,   "&P", ":", "bridge",       TRUE,   1,  255, 0, 128 },
#ifdef DRAGONFLIGHT
{ SECT_ROAD,         "&Y", ":", "road",         TRUE,   1,  215, 107, 0 },
{ SECT_LANDING,  "&R", "#", "landing",      TRUE,       1,  255, 0, 0 }
#else
{ SECT_ROAD,         "&Y", ":", "road",         TRUE,   1,  215, 107, 0 }
#endif
};

Any help would be greatly appreciated.

EDIT: I found the define in overland.h

struct sect_color_type
{
sh_int sector;  /* Terrain sector */
char * color;   /* Color to display as */
char * symbol;  /* Symbol you see for the sector */
char * desc;    /* Description of sector type */
bool canpass;   /* Impassable terrain */
int move;             /* Movement loss */
sh_int graph1;  /* Color numbers for graphic conversion */
sh_int graph2;
sh_int graph3;
};

Upvotes: 0

Views: 2476

Answers (1)

Josh Weinstein
Josh Weinstein

Reputation: 2968

In C structs are not like dictionaries in Python or other languages. Structs are specifically defined grouped chunks of memory that have named and sized fields. You are treating structs as collection, which they aren't.

You will need to define a struct somewhere before that array is initialized like this:

typedef struct
{
    int sectorType;
    char* Color;
    char Symbol; // you seem to only need a single character for this field according to your example.
    char* Description;
    int Passable;
    int Move;
    int rgb[3];

} sect_color_type;

note: I moved the rgb into it's own array of integers inside the struct.

Upvotes: 1

Related Questions