C错误中的外部结构错误:数组类型的元素类型不完整

问题描述

我有两个文件main.cother.h。我在main.c中声明了一些全局变量,其中大多数都很好。我可以在extern whatever中说other.h并访问这些变量。但是,我在main.c中定义了这样的结构:

struct LSA {
     int myID;
     int seqNum;
     int neighborID[256];
     int costs[256];
 } local_LSA[256];

当我尝试像这样在other.h中访问它时

extern struct LSA local_LSA[256];

我收到此错误消息

other.h:27:19: error: array type has incomplete element type ‘struct LSA’
extern struct LSA local_LSA[256];

我已经玩了一段时间,但是...感谢任何人能够提供的帮助!

解决方法

需要先定义结构类型,然后才能创建其任何实例。

在定义local_LSA之前,需要将结构定义移至other.h。

,

头文件不知道return "Potwor posiada calkowita odpornosc na " + final1[0] 的结构定义。相反,您应该做的是在“ lsa.h”中声明该结构,然后在.c文件中定义并分配该类型的变量。

请注意,您建议的设计是意大利面条编程。永远没有理由让另一个文件struct LSA访问main.c(这是程序的顶层)中的某个变量-否则您的程序设计有缺陷。使用setter / getter函数代替意大利面条。

,

根据C标准(6.7.6.2数组声明符)

  1. ... 元素类型不得为不完整或函数类型

在文件other.h中的数组声明中

extern struct LSA local_LSA[256];

元素类型struct LSA是不完整的类型,因为此时的结构定义未知。

因此编译器会发出相应的错误消息。

other.h:27:19: error: array type has incomplete element type ‘struct LSA’
extern struct LSA local_LSA[256];

您需要的是将结构定义放在数组声明之前的标题中。

例如,您可以在头文件other.h

中编写
struct LSA {
     int myID;
     int seqNum;
     int neighborID[256];
     int costs[256];
 };
 
 extern struct LSA local_LSA[256];

请注意该记录

 extern struct LSA local_LSA[256];

是数组的声明,而不是定义。

然后在main.c中,您可以再放置一个数组声明,例如

struct LSA local_LSA[256];

在这种情况下,数组的声明将生成所谓的数组临时定义。