最近写了两个类,一个manager类控制子对象,一个UI类是第三方UI的窗口类myui。UI类可以用这个UI的函数画出manager控制的子类的图像。但是为了manager类方便移植修改,所以对子对象的draw方法写在了manager类里,然后调用UI类中的实际的draw方法来完成对子对象的绘制。这样不管在android里或者IOS里或者windows里,只需要修改UI窗口类的draw方法,使用对应系统的draw就可以完成对子对象的绘出。
那么这种情况就导致了:UI类中有个manager类的实例,所以要include mananer类的.h文件。而manager类里又要有UI类的指针以调用UI类的draw方法,所以也要include UI类的.h文件。那么这就导致了循环引用,系统会报:class manager重定义。此时,就需要在两个.h文件中使用#ifdef #define #endif 或者#prama once来保证只编译一次。
然后,如果在manager.h中直接包含myui.h,那么系统会报错:使用未定义的类:class manager。解决方法:在manager.h中只能保存myui的父类指针,或者保存一个void *类型的指针,然后在manager.cpp中include myui.h,然后将父类指针或者void *指针转成myui.h。 不知道这种情况叫什么?哪里有介绍么?
我个人感觉这么做使用的很纠结,是不是我的设计有问题?