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. 函數(shù)的默認返回值類型
同上,VC8不支持把 int 作為默認返回值類
Func()
{return 0;}; //error in VC8 解決方法:
明確聲明函數(shù)返回值類型為 int.
5. 函數(shù)地址
Vc7中函數(shù)名就是地址。在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;
} 解決方法:
加上 &.
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;
} 解決方法:
強制轉(zhuǎn)換或函數(shù)參數(shù)變成const B*。
7. 友元方法(Friend function)
VC8不允許聲明一個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 被移進了stdext命名空間中.
#include <hash_map>
std::hash_map //error in VC8 解決方法:
使用stdext 命名空間.
#include <hash_map>
stdext::hash_map 9. 頭文件
許多頭文件如fstream.h 和iostream.h在VC8中已經(jīng)不存在了.
#include <fstream.h> //error in VC8 解決方法:
使用STL.
10. Iterator
一些 STL 類, iterators 不再用指針實現(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
使用一個Enum的成員時,不要使用enum的名字
enum E
{
a,b,c
};
E e1 = E::a; //warning in VC8 解決方法:
去掉Enum 的名字.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。