2012-10-18 28 views
-3

格式化代碼:http://pastie.org/5074835循環依賴 - 向前聲明不夠

我有實體類和組件類之間的循環依賴。 我嘗試轉發類聲明,但我必須訪問組件的更新方法,這種方式我不能。

有沒有辦法讓這項工作無需重新設計?

+0

您必須在Component.cpp中定義update-和init-method – AquilaRapax

+0

-1爲了不在問題中提供代碼,並且還提供了一個指向代碼不是導致錯誤的代碼的外部站點的鏈接。 –

+0

爲什麼你更喜歡重寫代碼而不是複製粘貼?爲什麼??? –

回答

3

您需要#include "Entity.h"Component.cpp

+0

對不起,我忘了把它放在pastie中。包含在我的源代碼中,並且該文件沒有問題。問題出在Entity.cpp第26行,update()不被識別 –

+0

和Entity.cpp中的#include 沒有必要 – AquilaRapax

+0

@Vee下次複製粘貼代碼!!!! –

0

用所有方法聲明這兩個類,然後定義metods?

頭:

class B; 

class A { 
    void method1(B b); 
}; 

class B { 
    void method2(A a); 
} 

源文件:

void A::method1(B b){ 
    ... 
} 

void B::method2(A a){ 
    ... 
} 
+0

這就是他已經在做的事情。 –

1

有一個在包括在Component.cppEntity.hComponent.hEntity.cpp沒有問題。如果將它們包含在頭文件中,將會產生循環依賴。所以繼續和#include "Entity.h" in Component.cpp`。

+0

這個餡餅已經過時了,對不起。我試過這樣做。包含在我的源代碼中,並且該文件沒有問題。問題出在Entity.cpp第26行,update()不被識別 –

+0

+1對於包含*的*沒有問題,但是**是**循環依賴關係,不論標頭是否包含對方。依賴關係是一個設計概念,頭文件/實現文件是一個實現概念。 –

+0

@Vee,但是你已經在'Entity'的其他方法中使用了'Component'的方法,所以'update()'應該被識別。 –