一个相互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();}