【问题标题】:error: array type has incomplete element type - already defined structs错误:数组类型的元素类型不完整 - 已定义的结构
【发布时间】:2013-04-22 06:12:03
【问题描述】:
extern  const   struct  ss_type     ss_table    [MAX_CLASS];
extern  const   struct  ss_group_type   ss_group_table  [MAX_GROUPS];

merc.h:4430:30:错误:数组类型的元素类型不完整 merc.h:4431:35: 错误:数组类型的元素类型不完整

从事一个宠物项目,我完全被这个项目难住了。我真的不知道为什么这个错误会反映这些行。我最好的猜测是编译器无法理解 ss_table、ss_type、ss_group_table 和 ss_group_type 是什么。

但是,ss_table 和 ss_type 是定义的

const struct ss_type    ss_table [MAX_CLASS] =  {   {   /* FALSE */  
"",     
{0},    
{0},    
{NULL}  
},

ss_group_table 和 ss_group_type 也是如此

const struct ss_group_type  ss_group_table [MAX_GROUPS] = 
{
  /* NONE: FALSE return 0 */
  {"", 0,
   {
     {NULL, 0, 0,   {NULL},    {NULL}  }
   }
  },

这让我不知道如何解决这个错误。

【问题讨论】:

  • 错误具体指向哪一行?
  • 您的评估是一个很好的猜测,考虑到“不完整的元素类型”与编译器所说的我不知道 X 是什么一样清楚。 struct ss_type 是否在上面 的任何位置定义,或包含beforeextern 给您带来问题?看看你的代码。
  • 我试图尽可能地缩短,但所有这些都位于数千行代码和 3 个不同的文件中。我检查以确保包含相关文件,并且它们是。至少据我所知。

标签: c


【解决方案1】:

不,类型只是前向声明的,但没有被指定。至少你没有给我们任何东西。类似的 resl 定义

struct toto {
  double hei;
};

必须可见。

此类struct 定义应放在头文件.h 中并包含在.c 文件(也称为编译单元)中以使定义可见。

【讨论】:

  • struct ss_group_type{ char* name; sh_int skills; struct ss_info_type ss_info[MAX_GROUP_SKILL]; }; struct ss_type{ char* name; sh_int level[MAX_SELECT]; sh_int picks[MAX_SELECT]; char* group[MAX_SELECT]; 这样更好吗?对我来说还早,musta 抄错了。
  • 那会更好,但您的编译器会告诉您,这在它抱怨的地方是不可见的。
  • 所以我应该将它从它引用的文件中移到引发错误的文件中,然后从引用的文件中删除额外的定义?
【解决方案2】:

如果类型不完整,则表示它已经被前向声明,但还没有被完全声明。

例如,以下编译:

struct S1 {};
struct S1 arr1[10];

而以下不是:

struct S2;
struct S2 arr2[10]; /* error: array type has incomplete element type */
struct S2 {};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-09
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多