C ++包括 - 交叉引用文件

时间:2011-03-11 22:51:48

标签: c++ include

在C ++中,我有A.h和B.h. 我需要在B.h中包含A.h,然后我需要在A.cpp中使用B中的对象。所以我把A.h包括在A.h所以它拒绝了。 我试图在.H文件中使用这些行

#ifndef A_H
#define A_H
...my code
#endif

我有同样的拒绝。 所以我尝试在A.h文件中放

class B;

作为定义的类。 所以它把它作为另一个类而不是我想要的B类。 我该怎么做?

3 个答案:

答案 0 :(得分:2)

请参阅this FAQ

答案 1 :(得分:1)

你不能在B.h中包括A.h并且在A.h中也包括B.h - 它是循环依赖。

如果A中的结构或函数需要引用指向B中结构的指针(反之亦然),则可以在不定义结构的情况下声明结构。

在A.h:

 #ifndef __A_H__
 #define __A_H__

 struct DefinedInB;

 struct DefinedInA
 {
     DefinedInB* aB;
 };

 void func1(DefinedInA* a, DefinedInB* b);

 #endif __A_H__

在B.h:

 #ifndef __B_H__
 #define __B_H__

 struct DefinedInA;

 struct DefinedInB
 {
     DefinedInA* anA;
 };

 void func2(DefinedInA* a, DefinedInB* b);

 #endif __B_H__

您只能使用指针执行此操作,以避免循环依赖。

答案 2 :(得分:0)

通常,最好避免使用循环引用,但如果在设计中需要它们,并且依赖关系如下:

a.h <-- b.h <-- a.cpp (where x <-- y represents "y" depends on "x")

只需输入:

// A.h
#ifndef A_HEADER
#define A_HEADER
...
#endif

// B.h
#ifndef B_HEADER
#define B_HEADER
#include "A.h"
...
#endif

// A.cpp
#include "A.h"
#include "B.h"
// use contents from both A.h and B.h