一个小弟我有点不太清楚且描述不清的C++有关问题

一个我有点不太清楚且描述不清的C++问题我在实现一个书上的简单实例,出了一个问题,而自己又想不出到底是哪

一个我有点不太清楚且描述不清的C++问题
我在实现一个书上的简单实例,出了一个问题,而自己又想不出到底是哪里的问题,还请各位指点一下:

C/C++ code
//我将程序主要出现的问题用简单的代码突显出来,大致问题也是这样#include <iostream>using namespace std;class B;class A{public:    void test(const B *msg){        cout<<msg->_x;//编译器报错,为use of undefined type 'B',使用未定义的B    }    int _y;};class B{public:    int _x;    A *a;};


编译器在那报错我不太理解,我明明在前面声明了class B;为什么还是出现这样的问题
而当我将B类实体放在A类前面,并在B前面声明A类,这样又能编译通过,注意到,我的B类中也使用了A类的一个指针变量;

当我将B类中的A *a;改为A a;定义一个A类的成员变量时,这时,同样的错误又发生了, 'a' use of undefined type 'A'

我到底是将A类放在B类前,还是将B类放在A类前呢,有点小纠结,又或许是我根本就将语法弄错了呢。请各位开导一下,谢谢!

[解决办法]
比较简单的方法,是把那个成员函数的定义放到B定义的下面:
C/C++ code
class B;class A{public:    void test(const B *msg);    int _y;};class B{public:    int _x;    A *a;};void A::test(const B *msg){    cout<<msg->_x;//编译器报错,为use of undefined type 'B',使用未定义的B}
[解决办法]
探讨
非常感谢你的帮助,我想问的有没有这种可能,
A类中的成员有B类(非指针),B类中的成员有A类(非指针),这样我想想都矛盾,是不是语法上有这上面的规定呀?