标准头文件中的错误

Errors within standard header files

本文关键字:错误 文件 标准      更新时间:2023-10-16

我目前收到以下错误:

C:\Program Files\Microsoft Visual Studio\VC98\include\iomanip(15):错误 C2059:>语法错误:"命名空间"

C:\Program Files\Microsoft Visual Studio\VC98\include\iomanip(15):错误 C2334:>'{'前面出现意外标记;跳过表观函数体

C:\Program Files\Microsoft Visual Studio\VC98\include\math.h(36):错误 C2059:语法>错误:"字符串"

C:\Program Files\Microsoft Visual Studio\VC98\include\math.h(36):错误 C2334:意外的>"{"前面的令牌;跳过明显的函数体

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

任何帮助都会很棒。

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

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

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

Visual Studio:

  1. 打开项目的"属性页"对话框。
  2. 单击 C/C++ 文件夹。
  3. 单击"高级"属性页。
  4. 显示包括(是)
生成

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

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

我在学生代码中遇到了"跳过明显的函数体"错误,很难追踪,因为我预计这是一个大括号不匹配。

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