【问题标题】:Over 200 ~SYNTAX ERRORS~ in math.h for visual studio, which doesn't make sense视觉工作室的 math.h 中有超过 200 个~SYNTAX ERRORS~,这没有意义
【发布时间】:2015-01-31 22:02:17
【问题描述】:

使用 Visual Studio Express2013 for Windows Desktop,带有“Win32 控制台应用程序”C++ 项目

(我正在为一门课程做一个项目。为了开始,我必须导入讲师提供的所有项目文件 - 有很多(所有 .cpp 和 .h 文件),所以我真的不能在这里复制粘贴它们中的任何一个……但无论如何我认为这不是问题)。

当我点击“运行调试器”时,我在 math.h 中发现了近 200 个语法错误即使 math.h 是 Visual Studio 附带的。

所有的错误看起来都很简单,比如:

"Missing ')' before identifier _X'"
"'_X' : undefined identifier"
"'floor' : definition of dllimport data not allowed"
"syntax error : missing ';' before '+'"


etc... these syntax errors go on into the 200s.

(我会复制粘贴整个错误日志,但是有262个错误,并且它们都有文件目录路径,所以你们无法阅读)

如果 math.h 是来自 Visual Studio 本身的文件,为什么我在 math.h 中有这么多语法错误?

(我已经尝试解决这个问题好几个星期了,直到它编译完成后我才能真正开始处理该项目)

【问题讨论】:

  • math.h 是 C 头文件,请改用 cmath
  • 检查您的包含,在其他内容之前包含math.h(将其移至包含列表的顶部)。
  • 一个简单的程序怎么样? #include <math.h> int main() { double d = sqrt(4.0); } 这是做什么的?如果它可以编译,那么所有这些头文件都会导致问题——它与 Visual Studio 无关。
  • 将其更改为 cmath.h 并将其移至顶部 - 只有 16 个错误而不是 262 个,但仍然有错误 - 我会看看并回复你们。
  • <math.h> 是 C 标头。在 C++ 代码中使用它是完全合法的,但首选 C++ 特定版本 <cmath>(不同之处在于 <cmath> 将声明放入 std 命名空间)。将其更改为<cmath.h> 可能会减少错误的数量——第一个可能是<cmath.h> 不存在;它是<cmath>不是 `。您的问题需要包含您正在编译的源文件,最好是重现问题的简化版本。而且您不必向我们展示数百行错误消息,但前几行会有所帮助。

标签: c++ visual-studio-2013 compilation syntax-error math.h


【解决方案1】:

问题可能出在头文件本身 - C++ 为旧的 C 库提供了自己的等效库。它们采用以下格式:

c[library name]

其中 [library name] 被旧的 C 库 MINUS 替换为 .h 扩展名。

要将 C 库中的 math.h 包含在 C++ 程序中,您可以这样做:

#include <cmath>

您也可以尝试其他人所说的一些事情。

注意:我不确定旧的 C 标头是否是问题的根源,但由于 C++ 确实引入了一些不兼容性,这很可能是问题所在。

【讨论】:

  • 嘿,这就是我现在遇到的麻烦......我没有写#include ,而是写了#include ,并使用管理员将cmath更改为cmath.h特权......这种导致“级联”,因为其他东西依赖于 cmath,而我将其更改为 cmath.h 搞砸了这些调用......现在我不允许编辑这些文件(即 xlocnum 不会让我编辑它)有没有办法让我将 cmath.h 改回 cmath?
  • 通过显示扩展名删除 .h,右键单击文件并选择重命名,然后按是确认。
  • 所以事实证明,没有找到 cmath.h 的东西的 16 个错误一定只是掩盖了我原来的 260 个错误......因为现在它们都回来了(而且都在 math.h 中,尽管我没有在任何地方使用 math.h...)
  • 好的,尝试完全重新安装VS
  • ... 好的,这里有一个提示——除非有非常特殊的原因(例如编译器的支持团队向您推荐它),否则不要乱用系统/编译器头文件和ource 文件.
【解决方案2】:

在您在 cpp 文件中提到#include &lt;math.h&gt;之前,您可能已经包含了一些头文件。该头文件可能在类/函数声明的末尾错过了;,从而导致math.h 文件中的错误。例如,

#include "test.h"

#include &lt;math.h&gt;

如果test.h 的类/数据类型/函数声明最后缺少;,则会导致math.h 出现错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 2011-06-10
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多