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 的名字.

相关文章推荐

vs2005 vc++ 生成非托管的 不需要.net运行环境的exe程序方法

在VS2005里开发的VC++程序在编译的时候,微软默认会加入自己的 .Net Framework (方便推广自家产品),让你的VC++程序依赖它,这就导致程序编译后,无法跟往常一样直接打包,在别的机...

安装WinDbg, Windows SDKs 7.1, VC++2010 CMD过程日志

原来一直使用Platform SDK 6.0A和VC++ 2008 命令行,今天换了1台机器,结果cl link debug后的exe文件老是不能执行,想想也别麻烦了,干脆升级一下开发环境吧, 我的机...
  • mjk
  • mjk
  • 2011-07-03 18:51
  • 1503

VS2005 VC++ MFC 连接 MYSQL 数据库

个人使用mfc连接mysql的一些经验,用来与大家分享一下:首先安装mysql数据库,在安装内容中选择lib和include组件,用于mfc调用连接mysql的库文件。再到VS2005下的设置:(1)...

PHP调用VS2005VC++写的dll控件

测试环境:windows +Apache(PHP)+VS2005 一、建立ATL工程 1、打开VS2005,新建空项目,我们这里建NFS(图1) 2、在解决方案中,添加 >>...

关于vc++ 2005 发布程序的问题

拿到一个第3方的dll, 写了一个简单的程序测试这个DLL, 但是程序一启动就遇到了下面的错误:   The application failed to initialize properly ...

VC++的链接错误LNK2005

转载地址连接:http://www.douban.com/group/topic/2670445/ 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误...

vc++ error:LNK2005 已经在*.obj中定义

为什么会出现这个错误??“error LNK2005: 已经在*.obj中定义”    编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形...

安装VC++ 2005 EXPRESS 日志

安装VC++ 2005 EXPRESS 在这里记住一些要用到的文件。和常用问题。   【 MSDN链接文件的创建】   可用的命令行选项: /helpcol ms-help:// 使用指...

VC++连接SQL Server2005 数据库

下文可供参考用VS数据库连接建立连接出现如下错误: 在建立与服务器连接时出错。在连接到SQL Server 2005 时,在默认的设 置下SQL Server不允许远程连接可能会导致此失败 error...

VC++2005相关问题解决方案

微软的VC++ 2005的强大功能让人体验了不一样的感觉,对于习惯了VC++6.0的程序员来说可能会感觉VC++2005总有一些莫名其妙的问题。 诚然,VC++2005是存在着那么一些问题。这让使用V...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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