vc++7.1轉(zhuǎn)移到vc++2005 需要的一些變動(dòng)
在vc7.1中, 如果一個(gè)變量定義在for語(yǔ)句的條件從句中,那么這個(gè)變量可以在for之后使用。但Vc8禁止這樣,會(huì)報(bào)告一個(gè)C2065錯(cuò)誤.
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語(yǔ)句之前聲明變量(可保證代碼在vc7.1和vc8下同時(shí)編譯通過(guò))
int i =0;
for (i = 0; i < 10; ++i)
for (i = 0; i < 5; ++i)2. 指針和引用的聲明
在Vc7.1中, 下面的代碼可以編譯, 但是vc8會(huì)報(bào)C4430 錯(cuò)誤。(很難想象有些美國(guó)程序員竟然這樣聲明)
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. 默認(rèn)int類型
在vc7.1中,如果定義一個(gè)變量但不聲明類型,那么默認(rèn)為int。VC8不支持。
static i = 0; // C4430 error in Vc8
const i = 0; //C4430 error解決方法:
加上int.
static int i = 0;
const int i = 0;4. 函數(shù)的默認(rèn)返回值類型
同上,VC8不支持把 int 作為默認(rèn)返回值類
Func()

{return 0;}; //error in VC8解決方法:
明確聲明函數(shù)返回值類型為 int.
int Func()

{return 0;};5. 函數(shù)地址
Vc7中函數(shù)名就是地址。在vc8中,必須要使用&操作符同時(shí)寫(xiě)出這個(gè)方法的全名(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. 隱式類型轉(zhuǎn)換
VC8不允許B* 到const B*&的隱式轉(zhuǎn)換.

class B
{};
void fun ( const B* & );//if possible use const B* instead
int main() 

{
B *test = new B();
fun (test); //error in VC8
return 0;
}解決方法:
強(qiáng)制轉(zhuǎn)換或函數(shù)參數(shù)變成const B*。
void fun ( const B* );7. 友元方法(Friend function)
VC8不允許聲明一個(gè)private或protected函數(shù)為友元.
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:
把函數(shù)聲明為public
class A

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

{
friend void A::c();
};8. STL的stdext 命名空間
在vc8中,hash_map 和hash_set 被移進(jìn)了stdext命名空間中.
#include <hash_map>
std::hash_map //error in VC8解決方法:
使用stdext 命名空間.
#include <hash_map>
stdext::hash_map9. 頭文件
許多頭文件如fstream.h 和iostream.h在VC8中已經(jīng)不存在了.
#include <fstream.h> //error in VC8解決方法:
使用STL.
#include <fstream>10. Iterator
一些 STL 類, iterators 不再用指針實(shí)現(xiàn)
std::vector<DMDetailRow> m_data;
std::vector<DMDetailRow>::iterator iter = &m_data[rowNum];解決方法:
std::vector<DMDetailRow>::iterator Iter = m_data.begin() + rowNum;11. Enum
使用一個(gè)Enum的成員時(shí),不要使用enum的名字
enum E

{
a,b,c
};
E e1 = E::a; //warning in VC8解決方法:
去掉Enum 的名字.
E e1 = a;posted on 2006-03-09 08:48 夢(mèng)在天涯 閱讀(1223) 評(píng)論(2) 編輯 收藏 引用 所屬分類: CPlusPlus

