c++允许类的前项申明,但要求申明在其他未完成定义前只能作为引用或者指针使用。
想必大家都会遇到一个这样的问题:
我有两个类,他们需要互相使用对方的成员?
理所当然的大家会想到其中一个类前项申明一下就完了,但实际操作时就会遇到问题。类在未完成定义前不允许使用其成员函数,只能作为指针或引用使用,这样就限制了我们的实际操作。
如下
#include<iostream>
using namespace std;
class A;
class B{
public:
B(){
}
void callA(A& a){
a.call();
}
};
class A{
public:
A(){
cout<<"A is creat"<<endl;
}
void call(){
cout<<"A is call"<<endl;
}
};
int main(){
A a;
B b;
b.callA(a);
return 0;
}
[Error] invalid use of incomplete type 'class A'
[Error] forward declaration of 'class A'
dev上是这样的报错
为解决这个问题,我们其实可以使用类外定义成员函数的办法解决。具体操作是:将 使用到前项申明类成员的 成员函数放置到前项申明类的完整定义的下方。
这样的做法可以使得 使用到前项申明类成员的 成员函数在编译时,前项申明类已经完成定义并编译,故可以正常编译执行。
代码如下
#include<iostream>
using namespace std;
class A;
class B{
public:
B(){
}
void callA(A& a);
};
class A{
public:
A(){
cout<<"A is creat"<<endl;
}
void call(){
cout<<"A is call"<<endl;
}
};
void B::callA(A& a){
a.call();
}
int main(){
A a;
B b;
b.callA(a);
return 0;
}