代码从vc7.1 到 2005 的一些变化(转)
来源:互联网 发布:知乎 健身太壮不好看 编辑:程序博客网 时间:2024/05/22 14:37
1. 变量作用域
在vc7.1中, 如果一个变量定义在for语句的条件从句中,那么这个变量可以在for之后使用。但Vc8禁止这样,会报告一个C2065错误.
{
//codes here
}
if (i < 10).. //error in Vc8
for (i = 0; i < 5; ++i) //error in Vc8
解决方法:
在for语句之前声明变量(可保证代码在vc7.1和vc8下同时编译通过)
for (i = 0; i < 10; ++i)
for (i = 0; i < 5; ++i)
2. 指针和引用的声明
在Vc7.1中, 下面的代码可以编译, 但是vc8会报C4430 错误。(很难想象有些美国程序员竟然这样声明)
const * int b; //error in VC8
int myfun (const & B); //error in VC8
解决方法:
把* 或&放到类型的后面.
const int* b;
int myfun (const B&);
3. 默认int类型
在vc7.1中,如果定义一个变量但不声明类型,那么默认为int。VC8不支持。
const i = 0; //C4430 error
解决方法:
加上int.
const int i = 0;
4. 函数的默认返回值类型
同上,VC8不支持把 int 作为默认返回值类
{return 0;}; //error in VC8
解决方法:
明确声明函数返回值类型为 int.
{return 0;};
5. 函数地址
Vc7中函数名就是地址。在vc8中,必须要使用&操作符同时写出这个方法的全名(fully qualified name).
{
public:
int Test(void);
};
void fun(int (A::*test) (void));
int main()
{
fun(A::Test);//C3867 error in VC
return 0;
}
解决方法:
加上 &.
6. 隐式类型转换
VC8不允许B* 到const B*&的隐式转换.
void fun ( const B* & );//if possible use const B* instead
int main()
{
B *test = new B();
fun (test); //error in VC8
return 0;
}
解决方法:
强制转换或函数参数变成const B*。
7. 友元方法(Friend function)
VC8不允许声明一个private或protected函数为友元.
{
private:
void c();
};
class B
{
friend void A::c(); //C2248 error, c() is invisible to class B.
};
解决方法 1:
声明友元类.
{
private:
void c();
};
class B
{
friend class A;
};
解决方法 2:
把函数声明为public
{
public:
void c();
};
class B
{
friend void A::c();
};
8. STL的stdext 命名空间
在vc8中,hash_map 和hash_set 被移进了stdext命名空间中.
std::hash_map //error in VC8
解决方法:
使用stdext 命名空间.
stdext::hash_map
9. 头文件
许多头文件如fstream.h 和iostream.h在VC8中已经不存在了.
解决方法:
使用STL.
10. Iterator
一些 STL 类, iterators 不再用指针实现
std::vector<DMDetailRow>::iterator iter = &m_data[rowNum];
解决方法:
11. Enum
使用一个Enum的成员时,不要使用enum的名字
{
a,b,c
};
E e1 = E::a; //warning in VC8
解决方法:
去掉Enum 的名字.
- 代码从vc7.1 到 2005 的一些变化(转)
- 从vc6升级到vc7的一些问题及解决方法
- 从vc6升级到vc7的一些问题及解决方法
- 从vc6升级到vc7的一些问题及解决方法
- vc7代码迁移到vc8的一些注意事项
- bootstrap从2.*到3.0的一些class变化
- bootstrap从2.*到3.0的一些class变化
- 谈谈OC到Swift的一些代码习惯的变化
- vc7.1的编译选项-转
- VC7到VC6工程的转换工具(转)
- 升级VC7项目到VC8的注意事项
- 升级VC7项目到VC8的注意事项
- 升级VC7项目到VC8的注意事项
- 升级VC7项目到VC8的注意事项
- 升级VC7项目到VC8的注意事项
- [转]拥抱变化——从Atlas到ASP.NET AJAX(3):“仁慈”的UpdatePanel
- 编程的另一面:从生死到变化~
- 编程的另一面:从生死到变化~
- 万能的数据库连接程序
- ASP 中将长标题用省略号收尾
- --C++ 中stdafx.h中文意思,并且在C++中起到的作用是什么?
- GBA coming
- 读书摘要--Inside The C++ Object Model
- 代码从vc7.1 到 2005 的一些变化(转)
- 想唱就唱!草根音乐_超牛的地铁清唱~
- J2EE程序员的武功修为
- Javascript控制文本框只能输入数字
- MAPX ,谁有在C#2.0下的MAPX地图开发源码,能发给我一份吗(急用)
- 2008年职场必做的10件事
- j2ee程序员应该掌握的linux知识
- 内部类(内嵌类)入门
- 头脑VS心灵