2012-02-23 150 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定义你使用它之前,我不会在其他文件中包含文件的顺序计数。