gpt4 book ai didi

c++ - 另一个 header 循环依赖

转载 作者:行者123 更新时间:2023-11-30 00:51:36 26 4
gpt4 key购买 nike

我知道这个网站上有很多关于循环依赖的答案,但我发现没有一个能解决我的问题,主要是因为我的定义是内嵌在标题中的。

我正在用 C++11 编写一个库。为了简化,我有两个类:

  • 异常 Exception.hpp
  • CallStackCallStack.hpp 中。

依赖项是:

  • Exception 大量使用 CallStack(在声明和定义中都需要 完整类型 CallStack ) 所以 Exception.hpp 包括 CallStack.hpp
  • CallStack 在其声明中根本不需要 Exception。它只需要在其中一个成员定义 (operator[]) 中抛出一个 Exception(调用一个非默认的 Exception 构造函数),所以它需要在定义中有一个完整的 Exception 类型。

我知道如果我把定义写在.cpp文件里,我就解决了问题,但是因为所有的方法和构造函数都不超过2行,所以我选择定义它们内联,这意味着它们需要在 .hpp header 中定义。

在声明之前有前向声明并在声明和定义之间包含其他 header 的解决方案不起作用,正如我所说,Exception 需要一个完整类型的 CallStack 在其声明中。

最佳答案

I know that if I write the definition in a .cpp file, I resolve the problem, but since all methods and constructors don't have more than 2 lines, I have chosen to define them inline, which means that they need to be defined in the .hpp header.

把定义写在.cpp文件里确实是正确的解决方法。您需要在 CallStack 中转发声明 Exception 类型,并将使用 Exception 的函数的实现细节移动到 .cpp 中文件。

关于c++ - 另一个 header 循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21125931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com