问题描述
我有两个文件,main.c
和other.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数组声明符)
- ... 元素类型不得为不完整或函数类型。
在文件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];
在这种情况下,数组的声明将生成所谓的数组临时定义。