vs2005对vs2003之c++编译

   影响到大多数程序设计人员的是默认的charset由原先的Ansi改成了Unicode。所有的Windows程序也把默认的字符型参数有单字节改成了双字节。一个最简单的方法,是在程序属性里面的charset属性由默认的Unicode改成not set. 不过这个并不能解决所有问题。当一个字符串全部由英文和字符组成时,程序没有什么问题。而当字符串中包含汉字时,也许只有自己费力的去转换了。
 
    要指出的一点是,在2003里面,给大多数函数传字符型参数,是可以用std::string.c_str()传值的,而在2005里面,默认的情况需要传递std::wstring.c_str().如果以前的程序中大量用了string的话,也许定义一个string到wstring的转换函数,定义一个从wstring到string的转换函数,会是一个合理的解决方案。
 
    不要太多的尝试使用改变charset来使以前的程序可以运行,更不要在2005的环境下,用charset = not set来编写新的程序,在未来的语言环境中,使用Unicode字符集,是大势所趋(远东地区)。如果你不能改变,接受吧^_^
 
    另外一个重要转变是对C#库的支持。请注意,这里谈论的是C++而不是C#。从VS2003开始,C++程序中支持调用C#的库函数。如果你对这个方面接触不多,大可不看下面这些内容。如果你手上的代码是在2003下面写的,而里面又用了Managed Extensions for C++的话,你需要接着往下看。
 
    在2005里,对C#库支持进化到了C++/CLI,这个进化,除了废除了一些关键字,引入了一些新的关键字,还有其他的升级。...所以,你原先的程序是肯定不能编译通过了。
 
    解决方案也很简单,同样是在属性页,将Common Language Runtime Support选项选择Common Language Runtime Support, Old Syntax (/clr:oldSyntax),大致就能编译通过了。不过,更可取得解决方案仍是代码升级,然后按新的规范编写代码。
 
    关于代码升级,有一篇Stan. Lippman(这个大牛,学C++的很多人都知道吧)的文档,Translation Guide: Moving Your Programs from Managed Extensions for C++ to C++/CLI, 可以找来看看。呵呵,这个在网上应该很容易找到,我偷下懒吧。

STL的iterator不能初始化了,否则会报错。
         std::vector<std::string>::iterator it=0;
         vs2003可以编译,但在2005下就报错:cannot convert from 'int' to 'std::_Vector_iterator

         必须写成

         std::vector<std::string>::iterator it

         这个问题应该在是由于类型检查更严格造成的。估计其他类似的使用方法也可能存在问题


一些字符串相关的操作会警告说是不推荐的方法。

         例如,如果使用了strcpy函数的话,就会出如下警告

         warning C4996: 'strcpy' was declared deprecated
      
        这是应为微软发明了“安全的C++”概念,意思是说,strcpy是不推荐使用的函数。


在vs2005下,数据类型必须明确定义
         const entrysize=0x10c;//在vs2003下是可以编译的

         但在vs2005下报错:error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

         必须修改成:const int entrysize=0x10c;


for循环条件中定义的变量被归入for循环代码块了

         例如

         for(DWORD i=0;i<size;i++)
         {

              buffer[i]=0;

              //some other codes

         }

         buffer[i]=100;//这里会报i没有定义的错误;

         在2005中,必须写成这样:

         DWORD i=0

         for(i=0;i<size;i++)
         {

              //some codes

         }

         buffer[i]=100;


某些MFC做了变化

         Save(CFile file);

         以上代码在2003下可以使用,在vs2005中

         编译报错:error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值