forward声明-C++中不同文件中的循环引用
forward declaration - Circular references in C++ in different files
如果我想要一个循环引用,但在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;
};
我不能只在一个带有正向声明的文件中实现它。
在这种情况下也可以使用正向声明:
// AUnit.h
class BClass;
class AClass : public TObject
{
__published
BClass * B;
};
// BUnit.h
#include <AUnit.h>
class BClass : public TObject
{
__published
AClass *A;
};
如果它们都在一个文件中,则与场景没有区别,因为#include
只插入包含的文件(实际上是突出文本替换)。这是完全一样的。在对BUnit.h
进行预处理后,上面的内容如下:
class BClass;
class AClass : public TObject
{
__published
BClass * B;
};
class BClass : public TObject
{
__published
AClass *A;
};
我假设您谈论的是循环依赖。
答案确实是使用正向声明,例如:
AUnit.h
#include <BUnit.h>
class AClass : public TObject
{
BClass *B;
};
BUnit.h
class AClass; // Forward declaration
class BClass : public TObject
{
AClass *A;
};
如果需要的话,您甚至可以在这两个头文件中都有一个正向声明。
相关文章:
- 打破循环引用在C++中更优雅
- 如何编译使用循环引用的代码?
- 关于C++中引用计数和循环引用的概念
- CBasePin 递增对拥有过滤器的引用.循环引用?
- 使用带有循环引用的weak_ptr
- 如何避免成员回调和shared_ptr循环引用?
- std :: make_shared(),std :: feek_ptr和循环引用
- 由于具有循环引用的类中的unique_ptr或向量而导致核心转储
- 我的内存泄漏是由循环引用引起的吗?
- C++:外部对象循环引用
- 使用 std::weak_ptr 和别名构造函数中断循环引用:声音或有问题
- #ifndef是否可以防止循环引用编译器错误
- shared_ptr和循环引用
- boost::序列化和循环引用反序列化
- 两个类之间的循环引用
- 循环引用的问题
- C++11, shared_ptr.reset() 和循环引用
- 如何初始化 const 循环引用成员
- C++中两个类对象的循环引用
- 如何使用std::shared_ptr检测或避免循环引用