数组类型有不完整的元素类型错误

时间:2018-05-14 15:54:42

标签: c arrays incomplete-type

我正在尝试编写一个程序并且相当缺乏经验(我自己教我自己)。我正在努力的一件事是:

overland.h:62:37:错误:数组类型的元素类型不完整'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
};

非常感谢任何帮助。

编辑:我在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;
};

1 个答案:

答案 0 :(得分:1)

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.