在C++中,我有A.h和B.h. 我需要在B.h中包含A.h,那麼我需要在A.cpp中使用B中的一個對象。所以我把A.h包括在A.h中,所以它拒絕了。 我試着在.h文件中使用這些線路C++包含 - 交叉引用文件
#ifndef A_H
#define A_H
...my code
#endif
我有同樣的拒絕。 所以我試着在A.h文件中把
class B;
作爲定義的類。 所以它把它作爲另一個班級不是我想要的B班。 我要做什麼?
在C++中,我有A.h和B.h. 我需要在B.h中包含A.h,那麼我需要在A.cpp中使用B中的一個對象。所以我把A.h包括在A.h中,所以它拒絕了。 我試着在.h文件中使用這些線路C++包含 - 交叉引用文件
#ifndef A_H
#define A_H
...my code
#endif
我有同樣的拒絕。 所以我試着在A.h文件中把
class B;
作爲定義的類。 所以它把它作爲另一個班級不是我想要的B班。 我要做什麼?
您不能在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__
你只能用指針做到這一點,又避免了循環依賴。
在一般情況下,最好是避免循環引用,但是如果你需要他們在你的設計,你的依賴性如下:
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
但在A.h中的問題我有一個參數從B – soufi 2011-03-11 23:24:52
另請參閱:http://stackoverflow.com/questions/4889462/cyclic-dependency-headers-and-templates – phooji 2011-03-11 22:54:38
對不起,你的描述有點混亂G。發佈所有文件的示例代碼將有所幫助。 – Mahesh 2011-03-11 22:58:37
請在您的問題中使用標點符號和適當的大寫字母。如果你不能花時間來清楚地交流,你爲什麼期望這裏的人花時間來清楚地回答? – 2011-03-12 00:11:15