C++ 关于类的引用有关问题 文件包含和类的声明

C++ 关于类的引用问题 文件包含和类的声明
比如有下列两个文件
//A.h
class   A
{
public:
......
}

//B.h
#include "A.h "
class   B
{
public:
  A   *p;
......
}
问题:一般情况下   A   *p;这句没错误,奇怪的是 怎么有时候在B.h文件中     A   *p;这句会报错
如果在类前面加上   class   A;
即:
//B.h
#include "A.h "
class   A;
class   B
{
public:
  A   *p;
......
}  
那么就可以引用A类,   A   *p;正确
这是怎么回事啊

关于调用另外一个文件的类,还请各位给解释下



------解决方案--------------------
#include "A.h "
class B
{
public:
A *p;
......
}
这样也会报错?
------解决方案--------------------
不理解,应该是不用加的,报什么错?类型没定义?
------解决方案--------------------
难道又是传说中的bug.