2012-02-23 209 views
3

我有這個有序的列表結構,有一個結構有兩個成員,一個Titem類型和一個int計數器的數組。現在,此列表可以採取任何類型並按升序排列。假設,我決定typedef char Titem,然後數組包含字符,如果我typedef int Titem,那麼數組包含整數。現在,我有一個類型爲Tage的結構;C中的前向聲明?

如何使有序列表中識別它。當我確實鍵入Tage Titem時,它會抱怨。我應該在哪裏插入OList頭文件?或者有沒有一種方法可以像C++中的C一樣執行前向聲明?

#ifndef OLIST_H 
#define OLIST_H 



     /*typedef char Titem; here, i typedef char to Titem, though commented out.. 
     how do i do similar thing for the Tage datatype i have? 

     */ 


     #define MAX 10 
     typedef struct { 
    int count; 
    Titem array[MAX]; //Titem is not typedefed yet, so error.. 
    } TOrderedList; 



    void initialize_list(TOrderedList *list); 
    int insert_item(TOrderedList *list, Titem item); 
    int retrieve_ith(const TOrderedList *list, int i, Titem *item); 
    int number_of_items(const TOrderedList *list); 
    int list_empty(const TOrderedList *list); 

    #endif  
+0

「當我確實輸入了Tage Titem時,它抱怨道。」你應該解釋「抱怨」。你有警告嗎?錯誤?信息是什麼?什麼線? – abelenky 2012-02-23 16:57:44

+0

這裏是Treg頭文件,我如何將這個頭文件導入上面的源代碼? typedef struct { short int reg; } Treg; void initializeTime(Treg * t); – helpdesk 2012-02-23 21:30:32

回答

1

還是有辦法像它是用C++做在C++做向前聲明?

不,你不能在這裏使用向前聲明。

理由爲什麼正向聲明將無法工作:

當您使用任何類型的前鋒聲明中,編譯器不知道它的組成也不裏面的成員,編譯器只知道的類型存在。因此,對於編譯器來說,這是一個未完成類型。對於不完整的類型,不能創建它的對象或做任何需要編譯器知道類型佈局的東西,而不是僅僅是一個類型。由於指向所有對象的指針只需要相同的內存分配,因此只要將類型作爲指針重新使用時就可以使用前向聲明。
然而,這裏的編譯器需要知道的類型Titem的佈局和大小,因爲它需要知道多少內存,同時創建一個數組,因此向前聲明類型Titem將無法​​正常工作分配。

解決方案:

你需要讓的Titem佈局要做到這一點的方式,編譯器知道是爲包括標題,你創建數組在源文件中定義的類型Titem

+0

請問,我如何在源文件中包含Titem類型?你能把它包含在代碼中嗎?我不想聲明Tage結構。我只想做一些類似於typedef Treg Titem的事情,並期望上面的源代碼來識別它並將它鏈接到在TorderedList結構中的數組。 – helpdesk 2012-02-23 21:24:29

0

作爲要創建的Titem陣列,編譯器需要的類型的完整定義;前向宣言是不夠的。

所以,你需要創建您的typedef之前完全定義Tage。由於編譯器需要知道Titem的大小,以創建TOrderedList結構

#define MAX 10 
typedef struct { 
    int count; 
    Titem *array[MAX]; //Titem is not typedefed yet, so error.. 
} TOrderedList; 

+0

,難道沒有其他辦法可以在上面的代碼中包含Tage,而不是完全定義它? Treg擁有自己的頭文件和源代碼。我如何將它們導入到上面的源代碼中而不用重新定義它? – helpdesk 2012-02-23 21:25:55

2

你不能在這裏使用前置聲明,除非你想用指針來Titem,等等。

包括Titem定義你使用它之前,我不會在其他文件中包含文件的順序計數。