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

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

最佳答案

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 移动到结构内它自己的整数数组中。

关于c - 数组类型有不完整的元素类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334476/

相关文章:

c - 在 OpenCV 中使颜色完全透明

c - 需要 strlen 帮助

javascript - 如何在 javascript 中按空格拆分字符串,除非空格出现在 "quote"之间?

c++ - 模板化循环继承

c++ - 不完整类型的无效使用 - 为什么在这种情况下没有错误?

c++ - 在 Windows 操作系统中控制和记录打印机事件

c - 在C中的函数中打印数组中的字符串

java - 骰子模拟并使用数组作为值

java - 如何在 Java 中使用多行 lambda 表达式对 int[] 进行排序

c++ - 作为函数参数和返回值的不完整类型