c++ 学习笔记(47)-C++中两个类中互相包含对方对象的指针问题
来源:互联网 发布:星际淘宝网txt免费下载 编辑:程序博客网 时间:2024/06/06 11:39
前几天很不爽,因为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++头文件的包含和类的声明等等都应该牵涉到编译器的编译顺序问题,忘大师为我讲解下这是为什么。
谢谢观众的捧场!
来源:http://www.cnblogs.com/hanxi/archive/2012/07/25/2608068.html
0 0
- c++ 学习笔记(47)-C++中两个类中互相包含对方对象的指针问题
- c++ 的类的提前声明已经 两个对象互相包含对方指针的类型的创建
- c++中两个类互相持有对方引用的方法
- C++中两个类的头文件互相包含问题
- VC编程过程中两个对象互相持有对方引用的解决方法
- C++中两个类互相包含
- C学习笔记--指针(更新中)
- C++中两个类互相包含的策略
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- c/c++中指针学习的两个绝好例子
- C/C++中指针学习的两个绝好例子
- TRIZ系列-创新原理-40-复合材料原理
- java_多线程
- C++初始化问题
- C语言第九天
- 我的新博客--nanxiao.me上线了
- c++ 学习笔记(47)-C++中两个类中互相包含对方对象的指针问题
- iOS工程如何支持64-bit
- C++ 派生类指针强制指向基类对象
- 第九周项目五程序填充题
- iOS 网络错误-分类
- C++ 断言
- 64-bit and iOS 8 Requirements for New Apps
- Java程序员的JavaScript学习笔记(14——扩展jQuery UI)
- OPENCV中值滤波