指针的使用

Qice 2015-09-27 10:47:47
#include<iostream>
using namespace std;

class A;
class B
{
A *a; 此处为什么不能用A a;
public:
void display();
};
class A
{
friend void B::display();
public:
void display()
{
cout << "调用私有函数" << endl;
}

};

void B::display()
{
a->display();
}


int main()
{
B b;
b.display();

system("pause");
return 0;
}
...全文
149 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-10-04
  • 打赏
  • 举报
回复
主要是,一个结构或者类,占用内存大小必须是编译器,可以计算并确定的。 A a; 在 类型A 没有定义好之前(定义不完整),a占用内存大小,是不可以计算出来的, 于是 类型B占用内存大小,也就不可以计算出来了。 这样编译器,就不知道如何编译下去了。 A* a; 对于任何类型的指针, 编译器都可以确定下来,占用内存大小 因为指针类型占用内存大小,是固定不变的,和所指数据类型无关。 所以编译器可以顺利的编译下去。 A &a;和指针类似。 C,C++中,类型占用内存大小,是编译器要考虑的一个很重要的因素。 其它语言,有时候,完全不介意,类型占用的内存大小。 或者说,有办法绕过这个问题。
jared_zhu 2015-10-04
  • 打赏
  • 举报
回复
在class B之前,class A只有声明,没有定义,这叫不完整类型,对于不完整类型,只能用其指针或者引用,不能声明具体object,因为不知道其实际所需大小 。
ri_aje 2015-09-28
  • 打赏
  • 举报
回复
只有声明不见定义的类型叫不完整类型,c++ 不允许定义不完整类型的对象。
bluewanderer 2015-09-27
  • 打赏
  • 举报
回复
这就好比说上帝造人的时候想人肚子里有个肝,而肝怎么造上帝又觉得应该先造完人再考虑,同时上帝又固执地认为不可以先弄个没肝的不完整的人以后想好肝怎么造再把肝补上,于是这个宇宙最终也没能出现人类... 你直接在B里放一个A,相当于让B的结构和A有关,而这种情况下C/C++要求A必须已经定义(其实并不是绝对必要这么设计,然而就是这么规定的),你这里A没定义所以不行。使用A的指针的话,B的结构里就是有个指针而已,不涉及A的具体结构,所以是没问题的。
dustpg 2015-09-27
  • 打赏
  • 举报
回复
因为那个时候还不知道A有多大, 硬是要A在B后定义的话, 可以用模板, 模板是使用时才生成代码.

64,637

社区成员

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

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