【问题标题】:Errors within standard header files标准头文件中的错误
【发布时间】:2012-04-26 12:26:21
【问题描述】:

我目前遇到以下错误:

c:\program files\microsoft visual studio\vc98\include\iomanip(15):错误 C2059:>语法错误:“命名空间”

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):错误 C2334:意外 >token(s) before '{';跳过明显的函数体

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

任何帮助都会很棒。

【问题讨论】:

  • 你正在编译的文件的后缀是什么?我怀疑它是.c,意味着源将被视为 C,而不是 C++。
  • 另一种可能性是在包含之前的代码中缺少(或不需要){ 或 }。
  • 您使用的是 C 编译器还是 C++ 编译器?你的代码是 C 还是 C++?
  • 事实证明,大约 50 行后,我没能在课程末尾添加 }

标签: c++ c syntax header


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    Visual Studio:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-03
          • 1970-01-01
          • 2019-01-24
          相关资源
          最近更新 更多