一个相互include的语法有关问题
一个相互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类的嵌套是无法更改而且都没有头文件,怎么办?
------解决方案--------------------
根据题意,稍作改动即可
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 *)p A::A() { p->fb(); }