2011-03-31 54 views
0

可能重复:
How to declare a structure in a header that is to be used by multiple files in c?头文件 - ç

C代码,头文件的问题。

我有一个头(list.h)文件定义两个链表结构,另一个queue.h包含一个队列的定义。

有一个结构包含列表和队列,在list.h中定义,因此依赖于queue.h文件。

包含所有其他结构的结构在list.h文件中定义,处理它的函数在list.c文件中定义。因此这两个文件都需要包含queue.h。

但是,如果我将它包括在list.h和list.c文件中,我会得到以下错误。

..\/queue.h:13:16: error: redefinition of 'struct qqq' 
..\/queue.h:13:16: note: originally defined here 

如果不是在一个或另一个,然后其他错误,大意是报头丢失: 它没有定义包含队列的结构。

有没有办法做到这一点......?

+2

http://en.wikipedia.org/wiki/Include_guard是你需要的;) – Chris 2011-03-31 11:31:03

+0

我喜欢这个想法(谢谢所有),它非常有意义,但是当我实现它时,我得到了'D:\ workspace \ swap \ Debug \../ pre boolean remote/swap.c:22:多重定义'main' swap.o:D:\ workspace \ swap \ Debug /../ swap.c:22:对于许多功能(prob all)。试图找到任何明显的原因,但没有运气到目前为止 – commentator8 2011-03-31 11:47:33

回答

3

您应该使用#ifndef预处理语句,以防止你的头的内容被包含两次:

queue.h:

#ifndef QUEUE_H 
#define QUEUE_H 

// QUEUE_H can be anything, but must be a unique constant specifiqu to your file 

typedef struct { 
    // ... 
} queue; 

#endif 

简单地以此为所有的头文件(具有不同常数每次),它会工作。

+0

谢谢@Wookai!回到上面的评论,我已经在每个头文件中包含这样的警卫(现在),并且每个函数都会得到这个错误 - 每次两次。 在生成文件中的一个潜在的切向注意,我应该有header.h:queue.h作为依赖项(与所有的x.o:y.h's)? – commentator8 2011-03-31 12:03:38

+0

在回答我自己的意见时,这是日食与自己破坏。不知道为什么。但是具有相同文件的新项目工作正常。谢谢! – commentator8 2011-03-31 12:44:51

0

使用这种方法来定义两个列表和队列的头文件

#ifndef HEADERNAME_H_ 
#define HEADERNAME_H_ 
// your code for header file  
#endif