在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类。 我该怎么做?
答案 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