读书人

一个相互include的语法有关问题

发布时间: 2012-03-15 11:50:38 作者: rapoo

一个相互include的语法问题
class B;
class A;



class A
{
public:
B * p;
void fa(){}

A(){p->fb();}
};

class B
{
public:
A * p;
void fb(){}

B(){p->fa();}
};

有以上定义,如果一定这样使用,怎么样声明才可以编译通过
首先说明的是a,b类的嵌套是无法更改而且都没有头文件,怎么办?

[解决办法]
根据题意,稍作改动即可

C/C++ code
class   A;class   B;class   A{public:        B*   p;        void   fa(){}        A();};class   B{public:        A*   p;        void   fb(){}        B(){p->fa();}};A::A(){p->fb();}
[解决办法]
申明只要做到先申明,后调用,编译就没有问题的啦!
C/C++ code
class   A { public: B   *   p; void   fa(){} A();}; class   B { public: A   *   p; void   fb(){} B();}; A::A(){p->fb();} B::B(){p->fa();}
[解决办法]
C/C++ code
class   B; class   A { public:   B  *p;   void  fa() {}   A();         //这里仅声明A(),因为class B还没有定义,不能解引用(B *)p ,所以将A()的定义后置}; class   B { public:   A   *p;   void   fb(){}   B(){p-> fa();} //这里时class A已经定义,所以可以解引用(A *)p; }; //后置的A::A()定义//此时 class B 已经定义,所以可以解引用(B *)pA::A(){  p->fb();} 

读书人网 >C++

热点推荐