C++中两个类中互相包含对方对象的指针问题
前几天很不爽,因为C++中两个类中互相包含对方对象的指针编译时提示某一个类未定义。。。所以我就想啊想,这样也对,我的头文件都有#ifndef的,包含了一次就不能再包含了,以为就实现不了这样的功能,于是就改了设计方案:
class A { public:A(B* pB):m_pB(pB){}private:B* m_pB; };class B { public:B() {} private:int m_i; };
只在一个类中包含另一个类的指针(算是聚类吧,A不管理m_pB的死活),而在B需要A的属性时通过传递参数进去。这样有些麻烦,但是勉强达到了我的需求。
今天,又遇到一个必须使用相互包含对象指针的问题,要不然通过参数传来传去麻烦的不得了。所以还是百度了下,结果终于找到了:(c++)两个类相互包含引用的问题。里面说的和我需要的差不多,解决方法是一样的。
文章里面说的很清楚了,我也在这里复述一遍吧,主要解决的就是文件包含的问题:在A的头文件(A.h)中包含B的头文件(B.h),在A的源文件(A.cpp)中包含(A.h),在B的头文件中使用A的声明(class A;)而不是包含A的头文件,然后在B的源文件(B.cpp)中包含A的头文件和B的头文件。代码如下:
// A.h #include "B.h" class A { public:A(B* pB):m_pB(pB) {}void useB(); private:B* m_pB; };//A.cpp #include "A.h" void A::useB() {//do something for m_pB }//B.h class A; class B { public:B(A* pA):m_pA(pA) {}void useA();private:A* m_pA; };//B.h #include "A.h" #include "B.h" void B::useA() {//do something for m_pA }
这样的话B的头文件中不能有使用A的对象指针m_pA的代码,否则会出现“使用了未定义的A”错误。
最后,问题算是解决了,但是我现在还是有点不明白的,这C++头文件的包含和类的声明等等都应该牵涉到编译器的编译顺序问题,忘大师为我讲解下这是为什么。
谢谢观众的捧场!
转载于:https://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html
C++中两个类中互相包含对方对象的指针问题相关推荐
- java不同类间调用数组_请问:JAVA中两个类中的方法都需要调用另一个类的数组进行对数组的初始化和调用。...
匿名用户 1级 2013-09-14 回答 import java.util.ArrayList; import java.util.Iterator; import java.util.List; ...
- python buildin 中的一些类中为什么方法的内容都是pass?
python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...
- springboot 项目中在普通类中调用dao层的mapper 出现空指针异常
springboot 项目中在普通类中调用dao层的mapper 出现空指针异常 参考文章: (1)springboot 项目中在普通类中调用dao层的mapper 出现空指针异常 (2)https: ...
- JSP中调用java类中的方法
JSP中调用java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:test 2.再在包中添加一个类:如 package test; public class conDatabase { ...
- java bufferedread_java中关于bufferedreader类中read方法
java中关于bufferedreader类中read方法 关注:58 答案:2 mip版 解决时间 2021-01-14 05:40 提问者孤城古巷 2021-01-13 06:28 如下.此时 ...
- VS2017写C++时报错 表达式必须包含指向对象的指针类型
上述代码出现报错"表达式必须包含指向对象的指针类型" 原因是 函数的形参列表中二维数组写错了,修改后应为 void LtoR(int** map, int left, int ri ...
- 表达式必须包含指向对象的指针类型,但他具有“int“?
xdm,今天在写逆序函数的时候遇到了这样一个问题--表达式必须包含指向对象的指针类型,但他具有"int"?原来问题出在这里... 首先来看看题目 创建一个整型数组,完成对数组的操作 ...
- java 两个类互相包含_如何在Java中互相使用两个类中的方法?
我一直在四处张望,我至少找到了一个不清楚的答案. 我正在使用GUI构建一个非常基本的聊天应用程序,并且已经将GUI与连接对象分离了.现在,我需要在服务器类中从GUI调用一种方法,反之亦然.但是我不太了 ...
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...
1 /* 2 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 3 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 4 ...
最新文章
- 一分钟AI | 特斯拉发布电动卡车,扫地机器人被曝窥探个人隐私
- 配置文件没有关闭保护模式_别人的Issue很快就能关闭,而我的问题却迟迟没有被解决...
- WebRTC能给我带来什么?
- cocos2dxFlappyBird开发总结二:开发环境介绍
- html摇晃的桃子代码,index.html
- VisualStudio安装
- 未解决:configure: error: XCode tool ‘metal‘ neither found in path nor with xcrunchecking for metal...
- PDFcrack暴力破解pdf密码
- 串口液晶屏和并口液晶屏的区别
- 360全景拍摄中相机的白平衡设置
- 《死神》现队长、原队长和假面的对照
- Java并发 - 线程的生命周期
- Mac中从pdf文件中提取指定页的方法
- Pyecharts树状图:地理图表
- nginx的配置优化及经常使用的超时配置说明
- 2022-2028全球与中国语音遥控器市场现状及未来发展趋势
- 织梦cms内容采集视频教程
- 使用a标签时不用href=““调转页面
- Mysql数据库简单介绍
- 第一次看母亲细嚼慢咽地吃饭,欣慰还是心酸?
热门文章
- 职场pua是什么意思,如何反职场pua,职场pua如何走出来
- 万紫千红总是春的上一句是什么,万紫千红总是春全诗赏析
- Linux服务器安装JavaWeb环境(一) Jdk,Maven,Nginx,Tomcat
- post报文给mqtt服务器没有响应,post请求转为mqtt的方法
- dbcc_DBCC FREEPROCCACHE命令介绍和概述
- Codeforece E. Anton and Permutation
- oracle备份恢复学习
- zabbix 的安装
- 在Linux调试web应用时,如何查看System.out.println的输出?
- Visual Studio2005下配置及运行NUnit