C++ 类相互包含如何定义?

假如现在有这样两个类a.b,两个类中互相包含:
class a:

        #ifndef a_h
    #define a_h
    #include "b.h"
    class A {
    private:
        B member;
    public:
        B f();
        friend void B::g();
    };
    #endif

class b:

      #ifndef b_h
    #define b_h
    #include "a.h"
    class B {
    private:
        A member;
    public:
        void g();
        A f();
        friend class A;
    };
    #endif

main.cpp

        #include "a.h"
    #include "b.h"
    int main(int argc, char *argv[])
    {return 0};

g++编译出错:
unknown type name ‘A’

请问怎么解决这个问题?
非常感谢!

应该在类内部定义指针,实例化B的时候,调用函数来new a.

不能循环包含
a.h

 #ifndef a_h
#define a_h
class B; //不要直接包含,简单声明即可
class A {
    private:
        B* member; //都要换成指针,这样才能用上面的简单声明(预先不知道大小)
    public:
        B* f();
        friend void B::g();
};
#endif

b.h也一样处理。

其中一个类中使用前向引用申明另一个类就可以了。