extern structs in C Error: array type has incomplete element type

extern structs in C Error: array type has incomplete element type

我有两个文件,main.cother.h。我在main.c里声明了几个全局变量,大部分都没问题。我可以在 other.h 中说 extern whatever 并访问这些变量。但是,我定义了一个这样的结构(在 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。

头文件不知道 struct LSA 的结构定义。您应该做的是在某些“lsa.h”中声明结构,然后在某些 .c 文件中定义和分配该类型的变量。

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

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

  1. ...The element type shall not be an incomplete or function type.

在此文件内数组声明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];

在这种情况下,数组的声明将生成数组的 so-called 暂定定义。