标准头文件中的错误

时间:2012-04-26 12:26:22

标签: c++ c syntax header

我目前收到以下错误:

  

c:\ program files \ microsoft visual studio \ vc98 \ include \ iomanip(15):错误C2059:>语法错误:'namespace'

     

c:\ program files \ microsoft visual studio \ vc98 \ include \ iomanip(15):错误C2334:>'{'之前的意外令牌;跳过明显的功能体

     

c:\ program files \ microsoft visual studio \ _vc98 \ include \ _ math.h(36):错误C2059:语法>错误:'string'

     

c:\ program files \ microsoft visual studio \ _vc98 \ include \ _ math.h(36):错误C2334:意外>令牌前面'{';跳过明显的功能体

由于它们都在标准库头文件中,因此只读,我不知道如何修复它!

任何帮助都会很棒。

4 个答案:

答案 0 :(得分:7)

在C / C ++中,预处理器在实际解析源代码之前运行,而#include基本上只是将不同的文件拼接在一起。这样做的一个结果是,C / C ++非常满意在一个文件中{与另一个(包含)文件中的}匹配。当然,没有人这样做(或者如果他们这样做,他们应该被拍摄),但因为C / C ++预处理器是如此简单,所以在技术上允许。

这样做的一个结果是,您自己的某个文件中的语法错误最终可能看起来像某个其他文件中的语法错误。当我忘记在课程定义之后放置;时,我经常遇到这种情况。但不匹配的{}可以(如您所发现的)具有相同的效果。

因此,如果您在某些包含文件中看到错误,您认为可能不应该存在(例如标准库),那么首先要查看的是该文件之前包含的任何文件。有时重新排列#include语句也有助于缩小错误来源。

答案 1 :(得分:1)

我遇到此错误,但发现问题是我正在定义的方法的名称已在window.h中定义为宏。所以我不得不#undef它。

答案 2 :(得分:0)

Visual Studio:

  1. 打开项目的“属性页”对话框。
  2. 单击C / C ++文件夹。
  3. 点击“高级属性”页面。
  4. 显示包含(是)

构建项目,在构建输出中,您应该看到包含树。 找到第一次出现的错误,然后向上扫描打开每个包含文件(您编写的文件),以查找哪个缺少大括号“}”

答案 3 :(得分:0)

我在学生的代码中遇到了“跳过表观函数体”错误,并且很难找到原因,因为我希望这是花括号不匹配。

我的学生有一个成员变量和一个成员函数声明了相同的名称。该函数位于变量之后,因此在函数体上解析失败。这与引用预定义宏的孔的答案中的最相似。