博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C++两个类相互引用的一点思考
阅读量:4109 次
发布时间:2019-05-25

本文共 766 字,大约阅读时间需要 2 分钟。

昨天跟朋友讨论了一下在C++中如果出现两个类相互引用的情况,编译无法通过的问题如何解决:

// A.h#ifndef A_H#define A_H#include "B.h"class A{    B b;};#endif A_H
// B.h#ifndef B_H#define B_H#include "B.h"class B{    A a;};#endif // B_H

以上代码是肯定无法编译通过的,编译器会告知如下错误:

error C2146: 语法错误 : 缺少“;”(在标识符“a”的前面)
[问题分析]

    这种引用方式是在一个类中包含了另一个类的实例,如:A类中包含了B类的实例,B类中又包含了A类的实例……如果允许这种情况出现,那么在实际生成对象时,将出现递归包含,最后耗尽资源。因此,无法通过编译是再正常不过了。

    类似可行的情形是,一个类包含另一个类的实例,另一个类包含指向前一个类的指针。由于指针的使用,在实例化时将不会出现递归生成对象的问题。在头文件包含方面,可以选择一个类的头文件包含另一个类的头文件,而另一个类的头文件中只声明需要引用的类,并在类中声明指针变量:

// A.h#ifndef A_H#define A_H#include "B.h"class A{    B b;};#endif A_H

// B.h#ifndef B_H#define B_Hclass A;class B{    A* a;};#endif // B_H

在main函数中只需要包含要使用的类头文件即可:

#include "A.h"int main(){    A a;    return 0;    }或者#include "B.h"int main(){    B b;    return 0;    }

转载地址:http://dvtsi.baihongyu.com/

你可能感兴趣的文章
用PostMessage或SendMessage发送结构体指针
查看>>
[VC]SendMessage和PostMessage发送消息(不同进程传递字符串)
查看>>
使用J-Link ARM烧录FLASH
查看>>
驻波比
查看>>
解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
查看>>
FPGA的基础知识
查看>>
银联POS规范总结
查看>>
NFC无线功能
查看>>
APN
查看>>
MDK中One ELF Section per Function选项功能探究
查看>>
基于PBOC的电子钱包消费交易过程
查看>>
uC/OS-II源码分析(总体思路 三)
查看>>
uC/OS-II源码分析(总体思路 二)
查看>>
uC/OS-II源码分析(总体思路一)
查看>>
一种三极管开关电路设计
查看>>
一个实用的三极管开关电路分析
查看>>
大电容滤低频,小电容滤高频?——滤波电容的选择 .
查看>>
浅谈为什么大电容滤低频小电容滤高频的问题
查看>>
C语言运算符优先级 详细列表
查看>>
I2C的上拉电阻可以是1.5K,2.2K,4.7K, 电阻的大小对时序有一定影响,对信号的上升时间和下降时间也有影响,一般接1.5K或2.2K
查看>>