5

我目前收到以下错误:

c:\program files\microsoft visual studio\vc98\include\iomanip(15) : error C2059: >syntax error : 'namespace'

c:\program files\microsoft visual studio\vc98\include\iomanip(15) : error C2334: >unexpected token(s) before '{'; 跳过明显的函数体

c:\program files\microsoft visual studio\vc98\include\math.h(36) : error C2059: syntax >error: 'string'

c:\program files\microsoft visual studio\vc98\include\math.h(36) : error C2334: unexpected >token(s) before '{'; 跳过明显的函数体

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

任何帮助都会很棒。

4

4 回答 4

7

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

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

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

于 2012-05-07T14:26:53.510 回答
2

视觉工作室:

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

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

于 2019-05-29T09:36:55.367 回答
1

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

于 2020-01-15T09:15:37.200 回答
0

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

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

于 2020-04-10T17:05:36.390 回答