簡體   English   中英

C 錯誤中的外部結構:數組類型具有不完整的元素類型

[英]extern structs in C Error: array type has incomplete element type

我有兩個文件, main.cother.h 我在main.c聲明了幾個全局變量,大部分都沒有問題。 我可以在other.hextern 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 數組聲明符)

  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];

在這種情況下,數組的聲明將生成所謂的數組暫定定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM