用#pragma once或者条件编译防止类重复定义的一个情景

本文探讨在C++中面对类之间的循环引用与多态设计时的解决方案,通过使用`#ifdef`, `#define`, `#pragma once`来避免编译错误,并介绍如何正确地使用父类指针或`void*`类型指针来实现灵活的类间交互,同时保持代码的可移植性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写了两个类,一个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。 不知道这种情况叫什么?哪里有介绍么?

我个人感觉这么做使用的很纠结,是不是我的设计有问题?

转载于:https://www.cnblogs.com/winnersun/archive/2011/07/24/2115398.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值