两个类交叉定义对象的问题..进来帮帮忙
为会下面class A类中用B b;为报错.用B *b就不会.哪位帮我分析一下为什么
#include <iostream>
using namespace std;
class A
{
B b;
//B *b;
};
class B
{
A a;
}
void main()
{
}
[解决办法]
看到B b;的时候,你的class B未声明呢,编译器不能解析B这个标识符
[解决办法]
编译器在遇到B b;时,需要确定到底需要为b分配多大的内存空间,所以这时必须已经有class B的定义才可能知道空间分配大小.
而B *b;只需要为b分配一个32位(如果是在32位机器上)大小的内存空间.因为存储一个指针,就只要知道这么些内容,不需要知道class B的定义.
[解决办法]
class B
{
A a;//需要知道A的定义,一边分配空间。
}
如果是指针的话大小是固定的,只需要类型相同就可以了
class B;前置声明,确定B是一个类
class A
{
B *b;
};
class B
{
A a;
}
void main()
{
}
[解决办法]
这种事情也不可能被允许啊。
你想,A里边有一个B,B里边有一个A,A里边当然还有个B,B里边当然还有个A——这不是两个镜子对着照吗?只要一创建,内存就耗光了。
而指针没有这个问题,指针永远只是一个保存内存地址的变量,所以,当你用B *b;时,刚说是,A里有个B,而B里有4个字节的地址——这当然没问题。
[解决办法]
如果你一定要互相包含对象,则无解。
所以你必须退一步:让其中的一个包含指针,这样只需要类声明就可以了(不需要类定义)。
两个类交叉定义对象的有关问题.进来帮帮忙
两个类交叉定义对象的问题..进来帮帮忙为会下面classA类中用Bb为报错.用B*b就不会.哪位帮我分析一下为什
