我有一個問題,用不同的對象類型創建某種形式的層次結構。我有擁有另一個類的成員的類,像這樣:解決交叉引用
class A
{
public:
A(){}
~A(){}
void addB(B* dep){
child = dep;
dep->addOwner(this);
}
void updateChild(){
child->printOwner();
}
void print(){
printf("Printing...");
}
private:
B* child;
};
這是B類:
class B
{
public:
void addOwner(A* owner){
ownerObject = owner;
}
//ISNT WORKING
void printOwner(){
ownerObject->print();
}
private:
A* ownerObject;
};
呼喚「B」淘汰類的函數「A」的工作方式好,但反過來試圖給出編譯器錯誤,因爲A沒有在B中定義。它實際上是通過使用include和forward聲明,但我想它是一個編譯器無法解決的交叉引用問題。
有沒有機會解決這個問題,還是應該重新考慮我的設計?
謝謝!這個「設計」背後的真正想法是擁有一個類(在這個例子中是A),它作爲許多抽象類(「B」)的容器,因此所有的「B」擴展了「A 「基於他們的具體實施。對於所有B對象的相同功能,我在A中創建了一個實現,因爲如果有10個B對象具有相同的功能,這沒有意義。至少這也是一個同步問題。 – SideEffect 2010-09-17 13:24:00
@ user450556:聽起來像你可能想看看基於策略的設計 – 2010-09-17 18:38:49