C ++中的循环引用在不同的文件中

时间:2011-06-22 17:32:31

标签: c++ forward-declaration

如果我想要循环引用但在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;     
};

我不能只在一个带有前向声明的文件中创建它。

2 个答案:

答案 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;
};

如果您愿意,甚至可以在两个头文件中都有前向声明。