C ++错误跟踪意外令牌

时间:2017-09-06 15:00:18

标签: c++

经过一些重构和更改C ++类后,发生了错误。奇怪的是,错误不在我的.cpp文件中,而是在外部包含文件(OpenSceneGraph)中,该文件到目前为止一直运行良好。

在osg / Object文件中有以下枚举

enum DataVariance
{
    DYNAMIC,
    STATIC,
    UNSPECIFIED
};

会导致语法错误。当我将STATIC更改为STATIc时,所有内容都可以正常完成。

  

错误C2059:语法错误:'static'

     

错误C3805:'Typ':意外令牌,预期为'}'或','

我没有改变OpenSceneGraph中的东西,只是使用OpenSceneGraph在类中重构了一些代码并且突然出现了错误。 整个编译器输出讨论外部代码中的错误。

如何从编译器输出中提取自己代码中的真正故障点?我认为这只是一些愚蠢的事情,但我不知道在哪里搜索错误。

(我不能只改变OpenSceneGraph的代码)

2 个答案:

答案 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来比较包含。