1

我已经使用 f2c 转换器 ( f2c ) 将一些旧版 Fortran 代码转换为 C,并且我已经在 Windows 7(64 位)上使用 Cmake 创建了一个 Visual Studio 10 解决方案。我还必须将我的 C++ 程序(test.cpp,包含我的 main 函数)与 f2c 库(使用 nmake 在我的系统上构建)链接起来。尽管我与 CMake 和 Visual Studio 进行了广泛的合作,但在编译程序后,我现在收到了一些与 Visual Studio 附带的头文件相关的神秘错误:

2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : '('
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : '-'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\intrin.h(141): error C2059: syntax error : ')'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2027: use of undefined type '_Ty'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2226: syntax error : unexpected type 'std::complex<_Other>'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2988: unrecognizable template declaration/definition
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2059: syntax error : '-'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2065: '_Ty' : undeclared identifier
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(250): error C2059: syntax error : ')'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(263): error C2065: '_Ty' : undeclared identifier
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(263): error C2065: '_Ty' : undeclared identifier
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(264): error C2143: syntax error : missing ';' before '{'
2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xcomplex(264): error C2447: '{' : missing function header (old-style formal list?)

从头开始创建 Visual Studio 解决方案文件似乎也不能很好地工作,而且我仍然收到相同的错误。我可以做些什么来追踪这些错误的问题?显然,我包含或编写的文件有问题,但它可能是什么?错误不会立即指向代码的某个部分,因此调试具有挑战性。

这是 f2c.h 头文件 ( f2c.h ) 的链接。我已经添加

#ifdef __cplusplus
extern "C" {
#endif

到顶部和

#ifdef __cplusplus
 }
#endi

到这个头文件的底部,因为我的 test.cpp 是一个 C++ 程序。

4

1 回答 1

2

似乎问题在于f2c.h定义了许多宏,包括一些用于数学函数的宏,例如abs. 当在标准标头中遇到相同的标识符时,这些宏会导致问题。

出于这个原因,我建议您始终将其包含f2c.h为文件中的最后一个标头(或#undef在包含其他文件之前包含冲突的宏)。

于 2012-05-21T04:50:07.293 回答