我有一个问题,用不同的对象类型创建某种形式的层次结构。我有拥有另一个类的成员的类,像这样:解决交叉引用
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