Doxygen 报告“潜在的递归类关系”

问题描述 投票:0回答:2

我有一个 C++ 模板类

base::Foo<class T>
,并且在另一个文件中有一个类
base::bar::Foo : public base::Foo<Baz>
。 Doxygen 似乎不喜欢这个,因为它会抛出错误

<unknown>:1: Detected potential recursive class relation between class snLib::mocTwod::DsaCell and base class DsaCell< snLib::mocTwod::ProblemTraits, detLib::cellDiffusionTwod::ProblemTraits >!

有没有办法防止这种情况发生? Doxygen 的文档没有讨论此错误或任何有关“潜在递归类关系”的内容。

“基础”类:

/*! \file snlib/DsaCell.hpp
 */
#ifndef snlib_DsaCell_hpp
#define snlib_DsaCell_hpp
#include "Dsa.hpp"

namespace snLib {
/*!
 * \brief  Implementation of naive cell-centered DSA
 */
template <class HoTraits_T, class LoTraits_T>
class DsaCell : public snLib::Dsa< HoTraits_T, LoTraits_T >
{
    [snip]
};
}
#endif

导致问题的其后代之一:

/*! \file snlib/twod/moc/DsaCell.hpp
 */
#ifndef snlib_twod_moc_DsaCell_hpp
#define snlib_twod_moc_DsaCell_hpp
#include "snlib/DsaCell.hpp"

#include "ProblemTraits.hpp"
#include "detlib/twod/celldiffusion/ProblemTraits.hpp"

namespace snLib { namespace mocTwod {
/*!
 * \brief Inconsistent DSA for MOC
 */
class DsaCell : public snLib::DsaCell<
                        snLib::mocTwod::ProblemTraits,
                        detLib::cellDiffusionTwod::ProblemTraits
                        >
{
    [snip]
};
} } // end namespace snLib::mocTwod
#endif

我的Doxygen配置文件设置了很多选项,包括路径配置:

STRIP_FROM_PATH
(设置为根目录)、
STRIP_FROM_INC_PATH
(同上)、
INCLUDE_PATH
(同上)。

编辑:看起来错误实际上是在另一个 Doxyfile 中引发的,该 Doxyfile 使用由名称冲突的文件生成的 XML 标记,因此问题与此相关。不管怎样,我只是将基类重命名为其他东西,一切又恢复正常了。

c++ doxygen
2个回答
1
投票

Doxygen 有一个函数可以检查类 A 和 B 是否有继承关系 (直接或间接),这是递归的。该函数检查递归的限制深度为 256。

可能 doxygen 与你的代码混淆了(因为名称重合),并认为 A 类依赖于 B,而 B 又依赖于 A。

这可能是 Doxygen 错误,但最好的方法是重命名该类。


0
投票

此警告似乎已在 doxygen 1.10.0 中修复。我的项目一直有这个烦人的警告,直到今天我们从 1.9.7 升级。

© www.soinside.com 2019 - 2024. All rights reserved.