另一个标头循环依赖项
Yet another header circular dependency
我知道这个网站上有很多关于循环依赖的答案,但我发现没有一个能解决我的问题,主要是因为我的定义是内联在头中的。
我正在用C++11编写一个库。为了简化,我有两个类:
Exception.hpp
中的Exception
依赖项为:
Exception
大量使用CallStack
(在声明和定义中,它都需要CallStack
的完整类型),因此Exception.hpp
包括CallStack.hpp
CallStack
在声明中根本不需要Exception
。它只需要在其中一个成员定义(operator[]
)中抛出一个Exception
(调用一个非默认的Exception
构造函数),因此它需要在定义中有一个完整类型的Exception
我知道,如果我在.cpp
文件中编写定义,我就能解决问题,但由于所有方法和构造函数的行数都不超过2行,所以我选择了内联定义它们,这意味着它们需要在.hpp
标头中定义。
在声明之前有一个前向声明,并在声明和定义之间包含另一个头的解决方案不起作用,正如我所说的,Exception
在其声明中需要一个完整类型的CallStack
。
我知道如果我在.cpp文件中编写定义,我就能解决问题,但由于所有方法和构造函数的行数都不超过2行,所以我选择了内联定义它们,这意味着它们需要在.hpp头中定义。
在.cpp文件中写入定义确实是正确的解决方案。您需要在CallStack
中转发声明Exception
类型,并将使用Exception
的函数的实现详细信息移动到.cpp文件中。
为声明(foo-declarations.hpp
)和内联(foo-inlines.hpp
)创建单独的头,并按顺序包括:
#include "Callstack-declarations.hpp"
#include "Exception-declarations.hpp"
#include "Callstack-inlines.hpp"
#include "Exception-inlines.hpp"
如果你不想到处重复四行,就把这四行放在另一个标题"Callstack+Exception.hpp"
中。或者对于最小包含:
// Exception.hpp
#include "Callstack-declarations.hpp"
#include "Exception-declarations.hpp"
#include "Exception-inlines.hpp"
// Callstack.hpp
#include "Callstack-declarations.hpp"
#include "Exception-declarations.hpp"
#include "Callstack-inlines.hpp"
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 如何在具有循环依赖的类中dynamic_cast?
- C++模板方法中的循环依赖关系
- 修复循环依赖项 c++17 标头
- 涉及全局对象的循环依赖C++
- 循环依赖,在继承类的情况下使用覆盖方法
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 错误 C2512 视觉C++(并且不是循环依赖项)
- CMake 外部和内部静态库的循环依赖关系
- 正在从继承中解析循环依赖项
- "std::shared_ptr"循环依赖关系是如何导致问题的
- 循环包含依赖项/转发声明
- 纯引用而不是weak_ptr来打破循环依赖关系
- 如何在Visual Studio(C++11)中处理相互依赖/循环依赖
- 优化依赖循环openmp