当两个类都需要引用对放的定义的时候,我们可以采取延期实现来避免矛盾。
#include<iostream>
class T{
public:
void func(); //这里T的func函数的实现需要Test的定义,需要可见Test的定义,延迟吧
};
class Test {
public:
friend void T::func(); //这里Test需要T的定义(引用了T的成员,内部细节).
private:
int t = 100;
};
void T::func(){
Test t;
std::cout << t.t << std::endl;
}
int main(int argc, char** argv)
{
T t;
t.func();
return 0;
}
对于类T和Test如果都采取默认内联的成员定义,那么就需要对放在自己的前面定义,然后就矛盾了,怎么搞呢,由于T中func声明不需要Test的定义和细节,所以直接将其func的定义延迟到Test定义之后即可。
class A;
class B{
public:
void func(A a);
};
class A{
public:
friend void B::func(A a){}
};
void B::func(A a){
}