我想使用 Clang-Tidy 来检查我在 QTCreator 中开发的 Cmake QT 项目。这是一个使用 Pybind11 与 Python 代码交互的 C++ 项目。
不幸的是,在此项目上从 QTCreator 中运行 Clang-tidy 总是失败,并出现以下错误:
C:\msys64\ucrt64\include\python3.12/object.h:352:23: error: expected member name or ';' after declaration specifiers [clang-diagnostic-error]
352 | PyType_Slot *slots; /* terminated by slot==0. */
| ~~~~~~~~~~~ ^
08:56:12: Error: Failed to analyze 1 files.
有关此错误的在线信息似乎很少。但我发现的似乎表明这是因为Python的object.h使用了
PyType_Slot *slots;
形式的保留关键字
有一篇文章建议定义
PYBIND11_NO_KEYWORDS
可以有所帮助 - 但我怀疑这是一个神话,因为我在任何地方都找不到多个对它的引用,并且搜索关键字不会在 python 安装目录中找到任何内容.
看起来一直在移动 Pybind11 标头的包含,之前 QT Headers 已修复它。
但是,这也适用于完整的包含树。因此,如果 A 包含 B,并且 B 包含 Pybind,则 A 应在包含任何 QT 标头(QObject、QProcess、QVector 等)之前包含 B