vc7代码迁移到vc8的一些注意事项

原创 2006年06月04日 13:14:00
1. 变量作用域
在vc7.1中, 如果一个变量定义在for语句的条件从句中,那么这个变量可以在for之后使用。但Vc8禁止这样,会报告一个C2065错误.
for (int i = 0; i < 10++i)  
{                             
   
//codes here
}

if (i < 10).. //error in Vc8
for (i = 0; i < 5++i) //error in Vc8

解决方法:
在for语句之前声明变量(可保证代码在vc7.1和vc8下同时编译通过)

int i =0;                    
for (i = 0; i < 10++i)
for (i = 0; i < 5++i)

2. 指针和引用的声明
在Vc7.1中, 下面的代码可以编译, 但是vc8会报C4430 错误。(很难想象有些美国程序员竟然这样声明)

const & int a; //error in VC8
const * int b;  //error in VC8
int myfun (const & B); //error in VC8

解决方法:
把* 或&放到类型的后面.

const int& a; 
const int* b;
int myfun (const B&);

3. 默认int类型
在vc7.1中,如果定义一个变量但不声明类型,那么默认为int。VC8不支持。

static i = 0// C4430 error in Vc8 
const i = 0//C4430 error

解决方法:
加上int.

static int i = 0
const int i = 0;

4. 函数的默认返回值类型
同上,VC8不支持把 int 作为默认返回值类

Func()
{return 0;}//error in VC8

解决方法:
明确声明函数返回值类型为 int.

int Func()
{return 0;};

5. 函数地址
Vc7中函数名就是地址。在vc8中,必须要使用&操作符同时写出这个方法的全名(fully qualified name).

class A
{
public:
     
int Test(void);
}
;
void fun(int (A::*test) (void));
int main() 
{
     fun(A::Test);
//C3867 error in VC
     return 0;
}

解决方法:
加上 &.

fun(&A::Test);

6. 隐式类型转换
VC8不允许B* 到const B*&的隐式转换.

class B{};
void fun ( const B* & );//if possible use const B* instead
int main() 
{
*test = new B();
fun (test); 
//error in VC8
return 0;
}

解决方法:
强制转换或函数参数变成const B*。

void fun ( const B*  );

7. 友元方法(Friend function)
VC8不允许声明一个private或protected函数为友元.

class A
{
private:
 
void c();  
}
;
class B
{
  friend 
void A::c(); //C2248 error, c() is invisible to class B.
}
;

解决方法 1:
声明友元类.

class A
{
private:
 
void c();  
}
;
class B
{
  friend 
class A;
}
;

解决方法 2:
把函数声明为public

class A
{
public:
 
void c();  
}
;
class B
{
  friend 
void A::c();
}
;

8. STL的stdext 命名空间
在vc8中,hash_map 和hash_set 被移进了stdext命名空间中.

#include <hash_map>
std::hash_map 
//error in VC8

解决方法:
使用stdext 命名空间.

#include <hash_map>
stdext::hash_map

9. 头文件
许多头文件如fstream.h 和iostream.h在VC8中已经不存在了.

#include <fstream.h> //error in VC8

解决方法:
使用STL.

#include <fstream>

10. Iterator
一些 STL 类, iterators 不再用指针实现

std::vector<DMDetailRow> m_data;
std::vector
<DMDetailRow>::iterator iter = &m_data[rowNum];

解决方法:

std::vector<DMDetailRow>::iterator Iter = m_data.begin() + rowNum;

11. Enum
使用一个Enum的成员时,不要使用enum的名字

enum E
{
  a,b,c
}
;
E e1 
= E::a; //warning in VC8

解决方法:
去掉Enum 的名字.

E e1 = a;

vc6迁移到VC8

作为C++编译器,从vc6到vc8最大的调整就是对C++标准的支持更好了。   我发现的几点不同。a. For 循环的声明      Vc6: for(int i   (ok)Vc8: for(int...
  • swandream
  • swandream
  • 2010年01月10日 15:27
  • 506

Tomcat迁移到WebLogic 11g部署项目注意事项

最近将web项目从tomcat中迁移到weblogic中产生了很多问题,特此记录一下: Tomcat 迁移到 WebLogic 11g部署项目注意事项 ====================...
  • dream_lixiang
  • dream_lixiang
  • 2017年03月28日 18:19
  • 563

SDL游戏开发教程09(代码迁移到VC8)

这节介绍怎么把前面的代码移植到VC8中来。       1、参考前一节(http://public0821.iteye.com/blog/306209 ),将SDL环境配置起来。  ...
  • kof98765
  • kof98765
  • 2013年11月10日 17:45
  • 763

从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】

SVN to Git:从SVN迁移到Git教程,最全面的讲解git svn clone的各个参数,以及使用file:///协议的本地SVN服务器的迁移命令。...
  • cckit
  • cckit
  • 2015年09月21日 14:02
  • 1073

升级VC7项目到VC8的注意事项

升级VC7项目到VC8的注意事项 Posted on 2005-12-20 23:34 Vince Yuan 在2005年年中的时候,公司就准备转移到Visual Studio 2005上开发产品。本...
  • wangjiwei2010
  • wangjiwei2010
  • 2006年09月30日 16:21
  • 925

升级VC7项目到VC8的注意事项

升级VC7项目到VC8的注意事项(转) 在2005年年中的时候,公司就准备转移到Visual Studio 2005上开发产品。本人有幸参与了升级的过程,成功的把30个左右solutions、几百个p...
  • backer01
  • backer01
  • 2008年03月03日 23:31
  • 98

SVN迁移到git

前言       目前同步开发有好几个项目,有的采用svn管理,有的采用git管理,一想也知道svn管理的项目都比较老,每次切换工程开发都要改变提交代码的方式。因此就打算把svn管理的项目迁移到git...
  • xueshanhaizi
  • xueshanhaizi
  • 2017年02月08日 17:11
  • 1960

oracle迁移到pg问题整理

这个帖子转自http://bbs.pgsqldb.com,把两个帖子合在一起了 很多内容是网上查的资料,我只是整理下,有遗漏的地方,欢迎补充 首先用工具(Ora2pg)自动转换 由于这个项目...
  • BeiiGang
  • BeiiGang
  • 2012年12月17日 17:36
  • 4565

2016-01-29 : csdn 迁移到 hexo

最近放假倒腾了一下 hexo ,diy了一下个人博客。以后就在 ThinerZQ’s Blog: http://www.thinerzq.me 写博客了。欢迎交流...
  • c601097836
  • c601097836
  • 2016年01月29日 20:09
  • 706

项目迁移 windows到linux

Sigar - no libsigar-amd64-linux.so in java.library.path
  • u011814926
  • u011814926
  • 2016年12月23日 21:27
  • 891
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc7代码迁移到vc8的一些注意事项
举报原因:
原因补充:

(最多只允许输入30个字)