使用前向声明:
//object1.h
class object2;
class object1{
object2 *pointer;
};
//object2.h
class object1;
class object2{
object1 *pointer;
};
前向声明引入了不完整的类型。简而言之,它告诉编译器该定义存在于其他地方。但是,您对不完整类型有一些限制。由于编译器不知道它的完整定义,它不能做一些事情,比如为它分配足够的空间、调用成员函数、检查虚拟表等。从根本上说,你可以做的只是声明它们的引用/指针并传递他们周围:
// Forward declaration
class X;
class Y {
private:
// X x; // Error: compiler can't figure out its size
X &x; // A reference is ok
public:
Y(X &x) : x(x) { }
// void foo() { x.foo(); } // Error: compiler can't invoke X's member
void bar();
};
// Full declaration
class X {
public:
void foo() { }
};
void Y::bar()
{
x.foo(); // Now it is OK to invoke X's member
}
一个好的模式是使用前向声明来打破头文件或类定义之间的依赖循环,让您想知道您的设计是否可以改进。