тип массива имеет неполную ошибку типа элемента

Я пытаюсь скомпилировать программу и довольно неопытен (учусь на ходу). Единственное, с чем я борюсь, это:

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;
};

person Andrew Ely    schedule 14.05.2018    source источник
comment
Вы создаете массив sect_show[] из sect_color_type, но он еще не видел определения структуры. Где это определяется?   -  person doctorlove    schedule 14.05.2018
comment
Вам нужно включить заголовочный файл с объявлением sect_color_type.   -  person малин чекуров    schedule 14.05.2018


Ответы (1)


В C структуры не похожи на словари в Python или других языках. Структуры — это специально определенные сгруппированные фрагменты памяти, которые имеют поля с именами и размерами. Вы рассматриваете структуры как коллекцию, которой они не являются.

Вам нужно будет где-то определить структуру, прежде чем этот массив будет инициализирован следующим образом:

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;

примечание: я переместил rgb в собственный массив целых чисел внутри структуры.

person Josh Weinstein    schedule 14.05.2018
comment
Я обнаружил, что в нижней части файла заголовка есть определение. Я добавил его в свой исходный пост. - person Andrew Ely; 15.05.2018
comment
@AndrewEly — это массив структур и определение вашей структуры в одном заголовочном файле? Если это так, переместите определение структуры над вашим массивом. - person Josh Weinstein; 15.05.2018
comment
определение структуры находится внизу заголовка, а extern — вверху. - person Andrew Ely; 16.05.2018
comment
Это, возможно, сделало свое дело! У меня есть еще код для изменения, но на этот раз ошибка не возникла. - person Andrew Ely; 16.05.2018
comment
Действительно так и было. Спасибо, Джош, за правильный ответ, и спасибо и вам, док. Игра запускается и работает красиво. - person Andrew Ely; 16.05.2018