【问题标题】:header file using another header - c [duplicate]使用另一个头文件的头文件-c [重复]
【发布时间】:2011-03-31 11:22:56
【问题描述】:

可能重复:
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

如果不在其中一个或另一个中,则其他错误导致标题丢失: 它没有定义包含队列的结构。

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

【问题讨论】:

  • en.wikipedia.org/wiki/Include_guard 就是你所需要的 ;)
  • 我喜欢这个想法(谢谢大家),它非常有意义,但是当我实现它时,我得到D:\workspace\swap\Debug/../pre boolean remote/swap.c:22: multiple definition of 'main' swap.o:D:\workspace\swap\Debug/../swap.c:22: first defined here 的许多功能(可能全部)。试图找到任何明显的原因,但到目前为止没有运气

标签: c file header dependencies


【解决方案1】:

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

队列.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

只需对所有头文件(每次使用不同的常量)进行此操作即可。

【讨论】:

  • 感谢@Wookai!关于我上面的评论,我在每个头文件中都包含了这样的保护(现在),并且每个函数都收到了这个错误 - 每个两次。在 makefile 的潜在切线注释上,我是否应该将 header.h: queue.h 作为依赖项(包含所有 x.o: y.h 的)?
  • 作为对我自己的 cmets 的回答,它是日食对自己造成的破坏。不知道为什么。但是具有相同文件的新项目可以正常工作。谢谢!
【解决方案2】:

Include Guards 在这种情况下会有所帮助。

【讨论】:

    【解决方案3】:

    使用它来定义列表和队列头文件

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2016-04-13
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      相关资源
      最近更新 更多