从“cmath”和“cstdlib”中得到一百个非常相似的编译器错误

Posted

技术标签:

【中文标题】从“cmath”和“cstdlib”中得到一百个非常相似的编译器错误【英文标题】:Getting a hundred of very similar compiler errors from 'cmath' and 'cstdlib' 【发布时间】:2014-03-17 07:27:16 【问题描述】:

我正在开发一个 C++ 项目,其中包括一些来自第三方的 C 代码。我的构建设置是“Desktop Qt 5.1.1 MSVC2012 64bit”,显然这是在 Windows 上使用 Qt Creator 时的默认设置。

当试图编译整个东西时,我得到了一百多个编译器错误。奇怪的是,它们似乎都非常密切相关,因为其中一半来自我假设的 C 标准库(因为它在错误上说“cstdlib”),另一半来自 C 数学库(cmath) .以下是我遇到的错误的摘录,

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\cstdlib:19: error: C2054: expected '(' to follow 'using'

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\cstdlib:19: error: C2061: syntax error : identifier 'using'

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\cstdlib:21: error: C2059: syntax error : ';'

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\cmath:28: error: C2061: syntax error : identifier 'acosf'

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\cmath:28: error: C2059: syntax error : ';'

例子都差不多了,就不用我多复制了。

奇怪的是,当我开始使用 QMake 和 MSVC2012 编译器时,我才开始遇到这种错误。在开始添加 Qt 前端之前,我在最新版本的 g++ (MinGW) 上编译了整个东西,并启用了 C++11 标志(请注意,在 Qt .pro 文件中也启用了此标志)。

正如我所说,我在我想使用的所有 C 模块周围包装了一个 C++ 类。我正在谈论的这些 C 模块包含防止 C++ 函数修饰其函数的代码:

#ifdef __cplusplus
extern "C" 
#endif

您认为这与编译器、代码本身(可能我的 C 和我的 C++ 没有正确放在一起)、构建或 make 配置...有关吗?

非常感谢任何提示或想法。

【问题讨论】:

'正如我所说,我在所有我想使用的 C 模块周围封装了一个 C++ 类。'展示你是如何做到这一点的。 此类问题的一个常见原因是在失败的头文件的#include 之前的语法错误(如忘记的“;”)。 如果按错误号搜索,MSDN可能有一些解决方案msdn.microsoft.com/en-us/library/0cyzw7b9.aspx 您是否将 C++ 编译为 C? 如果您解决了它,您应该添加解决方案作为答案,而不是更新问题。然后你甚至可以接受你自己的答案。 【参考方案1】:

cstdlib 不是 C 头文件,它是 C++ 头文件。如果你从 C 文件中包含它,你可以期待任何事情发生。

在 C 文件中,您必须包含stdlib.h。就这样。您不必将源文件的扩展名更改为 .cpp - 因为毕竟 C++ 不是 C。

【讨论】:

【参考方案2】:

我不确定你的程序中使用了什么“数学”。

但是,至少有一些与C编程的“数学”相关的方法在“limits.h”中,例如INT_MIN。

因此,我认为您可以尝试包含此标头,看看它是否有效。

【讨论】:

以上是关于从“cmath”和“cstdlib”中得到一百个非常相似的编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

eltable表格不超过一百个字符

为啥我在张量板上只看到大约一百个边界框?

谈谈龙之谷手游兼容测试的一百个坑

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!

强!真不愧是人类高质量男性!仅用三行代码就从一千个数字随机选出了一百个不同的数字!