类前向声明
在类的前向声明之后定义之前的这段代码中,只能使用这个类的符号(例如类的指针定义,但是指针调用什么函数是不可以指明的),但是不能涉及类的细节。
#include<iostream>
using namespace std;
class After;
class before{
public:
// After a; // 报错,需要初始化a中的参数,涉及类的细节
public :
After *a;
// before():a(new After()){} // 报错,调用了构造函数
void f()
{
// a->ff(); // 报错,使用了a
}
};
class After{
public :
void ff(){
cout<<"a"<<endl;
}
};
int main()
{
before aa;
aa.f();
return 0;
}
当before类放在after之后就没有问题了
#include<iostream>
using namespace std;
class After;
class After{
public :
void ff(){
cout<<"a"<<endl;
}
After(){
cout<<"使用了构造函数"<<endl;
}
};
class before{
public:
After a; // 正常
public :
After *b;
before():b(new After()){} // 正常
void f()
{
b->ff(); //正常
}
};
int main()
{
before aa;
aa.f();
return 0;
}