2013-10-25 61 views
0

我需要使用A.h中定義的結構作爲方法的參數以及B.h.中另一個結構的數據元素。 (我不能用一個指針StructA在StructB因爲數據到它最終將改變一點,我需要在StructB一個本地副本保存原始數據。)字段不是具有前向聲明的完整類型。抓住22?

啊:

struct StructA { 
... 
} 

了Bh

#include "A.h" 
struct StructA; 

class B { 
    method foo (StructA &structA); 
    struct StructB { 
    ... 
    StructA structA 
    } 

通過包括阿波黑,是不是StructA可用的聲明在波黑?但是,編譯器會抱怨「字段structA具有不完整的類型」。

如果我不轉發declare StructA,則編譯器會抱怨StructA未在方法foo中聲明。所以,顯然這個聲明在B.h.中是沒有的。

我在這裏錯過了一些基本的東西,但我無法弄清楚它是否會令我瘋狂!請幫忙!

+0

你可以請張貼更多的代碼和實際的錯誤信息嗎? – Sarien

回答

0

#include "A.h"與完整的類型確實提供B.h然而我的猜測是,你有一個圓形的包括,這就是爲什麼它不工作。 A.h是否包含B.h(直接或不)?

+0

是的,顯然(間接)它是。所以解決方案是拉StructA的聲明並將其放入它自己的頭文件中? –

+0

@BrianSpisak我認爲它已經在它自己的頭部。 –

+0

A.h本身並不是它自己的,並且依賴被多個包含混淆。底線是它是一個循環依賴。雖然我在這裏看到過類似的問題,但我並沒有立即看到它是如何造成這個問題的。說實話,我還不清楚,所以我不得不復習,並確保我理解這一點,並採取一些最佳實踐來避免將來出現這種情況。 –