2011-03-11 38 views
0

在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班。 我要做什麼?

+0

另請參閱:http://stackoverflow.com/questions/4889462/cyclic-dependency-headers-and-templates – phooji 2011-03-11 22:54:38

+0

對不起,你的描述有點混亂G。發佈所有文件的示例代碼將有所幫助。 – Mahesh 2011-03-11 22:58:37

+0

請在您的問題中使用標點符號和適當的大寫字母。如果你不能花時間來清楚地交流,你爲什麼期望這裏的人花時間來清楚地回答? – 2011-03-12 00:11:15

回答

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__ 

你只能用指針做到這一點,又避免了循環依賴。

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 
+0

但在A.h中的問題我有一個參數從B – soufi 2011-03-11 23:24:52