vs2010如何设置静态变量

2023-03-05 16:02 23次浏览 攻略

由于最近工作的需要,需要将VC6.0开发的项目迁移到VS2010以下,这个工程已经制作和更新了近十多年,手数不胜数,里面的东西更是异常,头皮会发麻,但是工作是要做的。

果然,用2010打开了dsw文件后,重新编译时,提示出了无数的错误与异常,看的头皮发麻,只能耐下心来,仔细分析,逐个修改,发现基本就以下8大类型的错误。

  1. fatal error C1083: 无法打开包括文件:“”: No such file or directory

    修改方法:将#include "" 修改为

    #include <fstream>

    using namespace std;

  2. error C2440: “static_cast”: 无法从“LRESULT (__thiscall CGpsView::* )(WPARAM,LPARAM)”转换为“AFX_PMSG”,在匹配目标类型的范围内没有具有该名称的函数

    error C2440: “static_cast”: 无法从“void (__thiscall CGpsView::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”, 在匹配目标类型的范围内没有具有该名称的函数

    解决方法:vs2010下对函数的结构要求比较严格,On_MEssage类型函数, 返回类型为LRESULT,要有参数和返回值 WPARAM,LPARAM;ON_COMMAND 类型函数,返回类型为 void, 且不能有参数,因此,第一个Error把 ON_COMMAND 改为 On_MEssage 就可以了;第二个把返回值类型改为 LRESULT即可。

  3. error C2664: “IsInTimeCode”: 不能将参数 1 从“CTimeCodesList *”转换为“const CTimeCodesList *&” 转换丢失限定符。

    解决方法:比较简单,强制类型转换即可,CTimeCodesList *pTimeCodesList; 改为 const CTimeCodesList *pTimeCodesList;

  4. error C2065: “i”: 未声明的标识符

    解决方法:变量作用域的问题,所以在for或if语句之前定义int i = 0 ;即可

  5. verror C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int

    解决方法:在默认定义时,直接定义为int

  6. error C2039: “WriteHuge”: 不是“CFile”的成员

    解决方法:函数发生了变更,因此将ReadHuge()改为Read(),WriteHuge()改为Write()

  7. error C2668: “pow”: 对重载函数的调用不明确

    c:program files (x86)microsoft visual studio 10.0vcincludema(583): 可能是“long double pow(long double,int)”

    c:program files (x86)microsoft visual studio 10.0vcincludema(535): 或 “float pow(float,int)”

    c:program files (x86)microsoft visual studio 10.0vcincludema(497): 或 “double pow(double,int)”

    尝试匹配参数列表“(LONG, int)”时

    解决方法:重载函数参数类型与定义不匹配,使用强制类型转换就可以了。

  8. LIBCMT.lib) : error LNK2005: _sprintf 已经在 m) 中定义

    LIBCMT.lib) : error LNK2005: __invoke_watson 已经在 m) 中定义

    LIBCMT.lib) : error LNK2005: __invalid_parameter 已经在 m) 中定义

LIBCMT.lib) : error LNK2005: __vsnprintf_s 已经在 m) 中定义

解决方法:这个问题时默认库与其他库冲突,解决方法如下:

解决方法

配置属性-〉C/C++->代码生成 -〉运行时库,改为多线程/MD

相关推荐