在学习友元相关知识时,对一些类内函数采取了在类外构造的方式:
class person;
class goodgay{
public:
person *p;
void visit();
void visit1();
goodgay();
};
goodgay::goodgay(){
p=new person;
}
void goodgay::visit(){
cout<<(*p).age<<endl;
cout<<p->num<<endl;
}
void goodgay::visit1(){
cout<<(*p).age<<endl;
//cout<<p->num<<endl;
}
同时在goodgay类前对将要访问的person类进行声明。
此时,编译器对此情况进行报错:invalid use of incomplete type 'class person'
我使用的解决方式为:将类外构造的函数放置在person类下,此时编译器才可以识别person类在类外函数中的作用。
class goodgay{
public:
person *p;
void visit();
void visit1();
goodgay();
};
class person{
friend void good();
friend void goodgay::visit();
public:
int age;
person();
private:
int num;
};
person::person(){
age=18;
num=1234;
}
goodgay::goodgay(){
p=new person;
}
void goodgay::visit(){
cout<<(*p).age<<endl;
cout<<p->num<<endl;
}
所以,在类外构造函数时,是否可以认为应将函数置于所包含类定义的下方。
另外,在类内定义函数的情况,仍包含此问题我未能解决,希望可以得到指点。