c++中类的向前声明

renwotao2009 2014-11-24 06:11:42
//  A.h 头文件
#pragma once
class A
{
public:
void Action();
};
// B.h 头文件
#pragma once
class A;
class B
{
public:
B(A*);
private:
A *pA; // Ok
//A a; // error, 不知道 A 的类型信息,无法求得 B 对象中 a 的具体大小值
};

在 B 类声明 A的变量a,我查看网上,给出的解释都是,一个需要占个位置,编译器不知道a具体长度,所以不能声明一个a类型的变量,因为无法分配空间。
在编译器,这里没有创建一个 B 的实例,为什么需要知道 要给 a 分配空间??
...全文
368 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
renwotao2009 2014-11-24
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
假设我什么一个B对象,但是初始化B::a的时候都不知道A是什么东西,那应该怎么办?! 不知道那意思就是不知道B应该占用多少空间,不知道B有多少空间怎么构造B的对象?! 那为什么指针可以? 因为指针或者引用有固定空间(在该次编译),我能计算指针所需大小所以指针跟引用可以声明!
也就是说:编译器在编译阶段必须知道 B 的大小来构造 B 对象(B的构造函数必须确定B的大小才能在被需要时构造B的空间),即使我们当时并没有创建 B的实例。
幻夢之葉 2014-11-24
  • 打赏
  • 举报
回复
假设我什么 = 假设我声明
ri_aje 2014-11-24
  • 打赏
  • 举报
回复
并不是只有创建对象才需要知道b类大小的。
幻夢之葉 2014-11-24
  • 打赏
  • 举报
回复
假设我什么一个B对象,但是初始化B::a的时候都不知道A是什么东西,那应该怎么办?! 不知道那意思就是不知道B应该占用多少空间,不知道B有多少空间怎么构造B的对象?! 那为什么指针可以? 因为指针或者引用有固定空间(在该次编译),我能计算指针所需大小所以指针跟引用可以声明!

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧