从"cmath"和"cstdlib"获得一百个非常相似的编译器错误

Getting a hundred of very similar compiler errors from 'cmath' and 'cstdlib'

本文关键字:相似 非常 编译器 错误 一百个 cmath cstdlib      更新时间:2023-10-16

我正在做一个c++项目,其中包括一些来自第三方的C代码。我的构建设置是"桌面Qt 5.1.1 MSVC2012 64bit",这恰好是在Windows上使用Qt Creator时的默认设置,显然。

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

C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecstdlib:19: error: C2054: expected '(' to follow 'using'
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecstdlib:19: error: C2061: syntax error : identifier 'using'
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecstdlib:21: error: C2059: syntax error : ';'
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecmath:28: error: C2061: syntax error : identifier 'acosf'
C:Program Files (x86)Microsoft Visual Studio 11.0VCincludecmath: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++没有正确地放在一起),构建或配置…?

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

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

我不确定你的"math"在你的程序中是用什么。

然而,至少有一些与"数学"相关的C编程方法在"limits.h"中,例如INT_MIN。

因此,我认为你可以尝试包括这个头,看看它是否有效。