在VS2010中编译旧C++代码时出现cmath编译错误

Mik*_*ley 10 c++ visual-studio-2010 cmath

我继承了一些C++文件和一个附带的makefile,我试图将其作为解决方案引入VS2010.我创建了一个空项目,并为其中一个makefile目标添加了适当的C++和头文件(.hpp).

但是,当我尝试编译项目时,我立即从cmath获得了大量关于acosf,asinf,atanf等的C2061(语法错误标识符)错误.

cmath中的错误行:

#pragma once
#ifndef _CMATH_
#define _CMATH_
#include <yvals.h>

#ifdef _STD_USING
   #undef _STD_USING
     #include <math.h>
   #define _STD_USING

#else /* _STD_USING */
   #include <math.h>
#endif /* _STD_USING */

#if _GLOBAL_USING && !defined(RC_INVOKED)

_STD_BEGIN
using _CSTD acosf; using _CSTD asinf;
Run Code Online (Sandbox Code Playgroud)

相关C++文件的顶部块(虽然命名为.C):

#include <fstream>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;
Run Code Online (Sandbox Code Playgroud)

接下来是main()函数,它不直接调用任何trig函数.这必须是非常明显的事情,但我很想念它.有人可以帮忙吗?

谢谢!

Kil*_*nDS 13

你确定它正在编译为C++吗?大多数编译器将.C文件编译为C和.cpp文件作为C++,使用C编译器编译C++文件可能会失败.

此外,该代码混合了oldstyle('c')标头和newstyle('c ++')标头.它应该更像这样(我怀疑这是错误).

#include <fstream>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>

using namespace std;
Run Code Online (Sandbox Code Playgroud)

这就是我所能看到的所有内容.但是大多数情况下,当你在C/C++本身的库文件中出错时,它仍然是你的代码在某处错了,比如忘记了; 在头文件中的类语句之后.

  • 其基于扩展名的.c或.C文件编译为C,并且.cpp/.CPP或任何其他变体在Visual Studio中编译为CPP文件.它没有像作者所想的那样编译为CPP,它正在编译为C.对于混合的C/CPP头部包含,它不是杀手. (2认同)

Jay*_*mer 5

它可能不会编译为 C++ 代码 - 正如您所假设的。我会要求你在 vs2010 中右键单击文件,单击属性,转到“配置属性 - C/C++ - 高级”,并确保“编译为”设置为“编译为 C++ 代码(/TP)” '.. 如果没有,将其更改为那个,然后重新编译 .. 您可能需要重新创建您的预编译头文件,但我将解决您的“问题”;)