vc++7.1转移到vc++2005 需要的一些变动

转载 2006年05月16日 22:31: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 的名字.

Kubernetes 基础 快速开始

https://kubernetes.io/docs/tutorials/kubernetes-basics/cluster-intro/ create a cluster> minikube ve...
  • guizaijianchic
  • guizaijianchic
  • 2017年09月04日 10:05
  • 554

ART Mterp Interpreter 解释 bytecode

Interpreter 首先分析 Interpreter 如何解释执行 dalvik byte code,Interpreter 在 ART 7.0有 3种实现: InterpereImpl ...
  • hl09083253cy
  • hl09083253cy
  • 2017年11月01日 21:06
  • 783

vc++7.1转移到vc++ 8.0 vs 2005 需要的一些变动

1. 变量作用域 在vc7.1中, 如果一个变量定义在for语句的条件从句中,那么这个变量可以在for之后使用。但Vc8禁止这样,会报告一个C2065错误. for (int i = 0; i  10...
  • SONIC3D
  • SONIC3D
  • 2007年10月30日 12:49
  • 798

招商银行余额变动提醒

我的问题(2012-12-18 14:18:42) 请问招商卡余额变动提醒收费吗    客服8604(2012-12-18 14:18:39) 欢迎您使用招行在线客服,很荣幸为您服务!   ...
  • GeneralYY0
  • GeneralYY0
  • 2012年12月18日 14:26
  • 5305

[c++基础]valarray模板详解

还记得vector怎么使用吗?valarray类似vector,也是一个模板类,其主要被用来对一系列元素进行高速的数字计算,其与vector的主要区别在于以下两点 1、valarray定义了一组在两...
  • qq_16098721
  • qq_16098721
  • 2016年02月06日 12:28
  • 553

图的表示方法 c++ 实现

图的表示最长用的两种方法是: 1)、邻接矩阵表示法 2)、邻接表表示 下面是两种构造图的方法 1)邻接矩阵: 2)邻接链表 #include using namespace std; //枚举...
  • xlf13872135090
  • xlf13872135090
  • 2013年12月26日 14:23
  • 11001

xcode8的一些变动

一、证书管理 用Xcode8打开工程后,比较明显的就是下图了,这个是苹果的新特性,可以帮助我们自动管理证书。建议大家勾选这个Automatically manage signing(Ps.但是在...
  • jnbbwyth
  • jnbbwyth
  • 2016年09月18日 17:22
  • 16683

centos7的一些变动

变化1.今天搭建Memos环境,通过8080端口一直无法访问,查看端口通信一切正常,怀疑是防火墙问题,然后使用service iptables stop来停止,报错如下: 查找资料发现: ...
  • weiguang1017
  • weiguang1017
  • 2015年09月21日 12:48
  • 342

C++11 新特性

函数式编程http://www.ruanyifeng.com/blog/2012/04/functional_programming.htmllambda表达式http://www.cnblogs.c...
  • qq_26437925
  • qq_26437925
  • 2016年08月10日 16:10
  • 250

CVPR2017文章汇总

Date Time Location # Session Session Title Paper ID Paper Title Authors Saturday, J...
  • Iriving_shu
  • Iriving_shu
  • 2017年09月28日 00:11
  • 440
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:vc++7.1转移到vc++2005 需要的一些变动
举报原因:
原因补充:

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