如果我想要循环引用但在C ++中的两个不同文件中,我将如何实现它?
例如
AUnit.h
#inclue <BUnit.h>
class AClass : public TObject
{
__published
BClass * B;
};
BUnit.h
#include <AUnit.h>
class BClass : public TObject
{
__published
AClass *A;
};
我不能只在一个带有前向声明的文件中创建它。
答案 0 :(得分:6)
在这种情况下你也可以使用前向声明:
// AUnit.h
class BClass;
class AClass : public TObject
{
__published
BClass * B;
};
// BUnit.h
#include <AUnit.h>
class BClass : public TObject
{
__published
AClass *A;
};
如果它们都在一个文件中,则没有区别,因为#include
除了插入包含的文件(它实际上是jut text-replacement)之外什么都不做。它完全一样。预处理BUnit.h
后,上面的内容将如下所示:
class BClass;
class AClass : public TObject
{
__published
BClass * B;
};
class BClass : public TObject
{
__published
AClass *A;
};
答案 1 :(得分:2)
我假设你在谈论循环依赖。
答案确实是使用前向声明,例如:
<强> AUnit.h 强>
#include <BUnit.h>
class AClass : public TObject
{
BClass *B;
};
<强> BUnit.h 强>
class AClass; // Forward declaration
class BClass : public TObject
{
AClass *A;
};
如果您愿意,甚至可以在两个头文件中都有前向声明。