【奇怪的异常】一个基础的有关问题,高手指教

【奇怪的错误】一个基础的问题,高手指教
下面是一个简单的控制台程序,编译出错
#include   "iostream.h "
class   A;
class   B
{
public:
A   *m_pA;
void   callA()
{
m_pA-> Hello();   //   屏蔽这一行就可以编译通过
}
};

class   A
{
public:
void   Hello()
{
cout < < "Hello\n ";
}
};

void   main()
{
}

请问是什么原因啊?

------解决方案--------------------
#include <iostream>
using namespace std;

class A
{
public:
void Hello()
{
cout < < "hello world " < < endl;
}
};

class B
{
private:
A *m_a;
public:
B()
{
m_a = new A;
}

void call()
{
m_a -> Hello();
}

~B() { delete m_a; }
};


int main()
{
B test;
test.call();
return 0;
}

给你一个可以编译的代码.
这里不能前向声明.因为必须知道类的详细信息.
------解决方案--------------------
编译通过。
------解决方案--------------------
class A
{
public:
void Hello()
{
cout < < "Hello\n ";
}
};

class B
{
public:
A *m_pA;
void callA()
{
m_pA-> Hello(); // 屏蔽这一行就可以编译通过
}
};

换换位置就过了