[英]extern struct array 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
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];
我已經玩了一段時間了,但是......我感謝任何人能夠提供的任何幫助!
需要先定義結構類型,然后才能創建它的任何實例。
您需要結構定義移動到other.h之前local_LSA
定義。
頭文件不知道struct LSA
的結構定義。 您應該做的是在某些“lsa.h”中聲明結構,然后在某些 .c 文件中定義和分配該類型的變量。
請注意,您建議的設計是意大利面條式編程。 另一個文件永遠不應該有理由extern
訪問 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];
在這種情況下,數組的聲明將生成所謂的數組暫定定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.