extern structs in C Error: array type has incomplete element type
extern structs in C Error: array type has incomplete element type
我有两个文件,main.c
和 other.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 数组声明符)
- ...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 暂定定义。
我有两个文件,main.c
和 other.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 数组声明符)
- ...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 暂定定义。