经过一些重构和更改C ++类后,发生了错误。奇怪的是,错误不在我的.cpp文件中,而是在外部包含文件(OpenSceneGraph)中,该文件到目前为止一直运行良好。
在osg / Object文件中有以下枚举
enum DataVariance
{
DYNAMIC,
STATIC,
UNSPECIFIED
};
会导致语法错误。当我将STATIC
更改为STATIc
时,所有内容都可以正常完成。
错误C2059:语法错误:'static'
错误C3805:'Typ':意外令牌,预期为'}'或','
我没有改变OpenSceneGraph中的东西,只是使用OpenSceneGraph在类中重构了一些代码并且突然出现了错误。 整个编译器输出讨论外部代码中的错误。
如何从编译器输出中提取自己代码中的真正故障点?我认为这只是一些愚蠢的事情,但我不知道在哪里搜索错误。
(我不能只改变OpenSceneGraph的代码)
答案 0 :(得分:0)
很可能这是与预处理器问题的名称冲突。这就是为什么旧的习惯以大写字母表示常量会产生问题,而不是修复它们。要解决此问题,请在包含之前删除宏定义:
#ifdef STATIC
#undef STATIC
#endif
#include <header_with_problem>
另一方面,取消定义此宏可能会在其他地方产生问题,然后您需要找到它具有的值并在包含后恢复它。 (或者如果可能的话,将其作为最后一个包括在内)
答案 1 :(得分:0)
解决方案和我预期的一样愚蠢:
我根据指南使用clang-format格式化我的代码。 clang格式工具更改了包含文件顺序(按字母顺序排列,无论谁设置此属性)。那次“轻微”的改变打破了我的代码。
提示:我使用预处理器来解决问题:
#if 0
// excluded code
#endif
和
#if 1
// included code
#endif
这允许我排除代码部分。如果编译仍然失败,那将是其余代码的问题。所以我发现,问题隐藏在一些包含文件中。
之后我使用SVN Diff来比较包含。