C++两个头文件相互包含

Posted

技术标签:

【中文标题】C++两个头文件相互包含【英文标题】:C++ two header files include each other 【发布时间】:2015-03-19 10:16:24 【问题描述】:

共有三个.h 文件

啊哈:

#ifndef __A_H__
#define __A_H__

#include"Card.h"
#include"B.h"

struct A
    Card card;
    .....
;

void getCards(A *a, int num);

#endif

B.h

#ifndef __B_H__
#define __B_H__

#include"Card.h"
#include"A.h"

struct B
    Card card;
    .....
;

void getCards(A *a, B *b, int num);

#endif

卡.h

#ifndef __CARD_H__
#define __CARD_H__

struct Card
    int num;
    char *type;
;

#endif

由于A.hB.h 相互包含,因此并非所有头文件都包含在内。

请给我一些建议。

【问题讨论】:

@EdChum :你应该把它变成一个答案 “并非所有头文件都包括在内”是什么意思。 ??? @EdChum :我进行了快速搜索,但没有找到我认为可以解决操作员问题的已回答问题。也许我还不够努力——感觉它应该存在。 @theadnangondal A.h 包括 B.h。由于有#ifndef语句,B.h没有编译 是的,当然......头文件没有编译,但是是的,我明白你的意思......似乎@EdChum提供的答案可以解决你的问题......即forward declaration跨度> 【参考方案1】:

据我所知,您不需要在“A.h”文件中包含“B.h”。所以删除它以减少依赖。 在“B.h”文件中包含“A.h”似乎也没有必要。一个简单的前向声明就足够了。

B.h

#ifndef __B_H__
#define __B_H__

#include"Card.h"

class A; // then you will have to include A.h in your B.cpp file

struct B
    Card card;
    .....
;

void getCards(A *a, B *b, int num);

#endif

【讨论】:

以上是关于C++两个头文件相互包含的主要内容,如果未能解决你的问题,请参考以下文章

qt c++对象头文件如何相互包含

我需要相互包含两个头文件,而不是使用前向声明导致“不完整类型”错误

头文件的相互包含会导致问题

c++关于multiset的头文件包含问题。

C++ STL 包含哪些头文件?

如何创建仅包含主文件和模板头 (C++) 的 makefile