基于C++中常見(jiàn)編譯錯(cuò)誤的總結(jié)詳解
更新時(shí)間:2013年05月16日 16:49:04 作者:
本篇文章是對(duì)C++中的常見(jiàn)編譯錯(cuò)誤進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在日常編碼過(guò)程中會(huì)遇見(jiàn)各種編譯錯(cuò)誤,本文對(duì)常見(jiàn)的編譯錯(cuò)誤進(jìn)行分析總結(jié)。(基本的編譯錯(cuò)誤在這里不列舉,后續(xù)后持續(xù)更新)
1、error c101008a解決方法
該錯(cuò)誤出現(xiàn)在項(xiàng)目升級(jí)過(guò)程中會(huì)出現(xiàn),比如說(shuō)項(xiàng)目從vs2008升級(jí)到vs2010.
解決辦法:在項(xiàng)目上點(diǎn)右鍵,清理(Clean),重新編譯,問(wèn)題解決
2、error C2252解決方法
該錯(cuò)誤主要在項(xiàng)目從vs2008升級(jí)到vs2010出先。
error C2252: an explicit instantiation of a template can only occur at namespace scope
解決方法:將特例話(huà)的模板移到類(lèi)外面(It is saying that you cannot explicitly instantiate a template inside a function or a class.Move it to outside the function or class.)
3、error C2143:語(yǔ)法錯(cuò)誤:缺少“;”(在“*”的前面)
該錯(cuò)誤主要是某類(lèi)型數(shù)據(jù)未include,可能是都文件拼寫(xiě)錯(cuò)誤、或者頭文件名已經(jīng)更改、或是頭文件忘記“;”
解決辦法:檢查頭文件是否更名、是否忘記結(jié)束的“;”
4、error C1010:查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。是否忘記了向源中添加“#include "StdAfx.h”
解決辦法:在報(bào)錯(cuò)行所在的文件的最前面添加“#include "StdAfx.h”
5、error C1189:出現(xiàn)了WINDOWS.H already included. MFC apps must not #include <windows.h>的處理辦法。
解決辦法:把#include<afxwin.h>提到最前面去就可以編譯成功了。
6、error LNK2005: _DllMain@12 already defined in dllmain.obj
解決辦法:你只需要在工程設(shè)置里面把WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MSGBOX_EXPORTS,_WINDLL,_AFXDLL
中的_USRDLL,刪除,就可以正確編譯了
7、R6010錯(cuò)誤,出現(xiàn)R6010錯(cuò)誤的原因很多
1、數(shù)據(jù)庫(kù)缺少一個(gè)視圖、
2、數(shù)據(jù)庫(kù)某個(gè)存儲(chǔ)過(guò)程名發(fā)生變化,也可能是參數(shù)個(gè)數(shù)發(fā)生變化。
3、exe和dll是否混用的不同版本的crt
4、內(nèi)存資源未釋放
5、輸出參數(shù)不正確
總之:windows將自身無(wú)法定位到的錯(cuò)誤類(lèi)型都?xì)w結(jié)為R6010錯(cuò)誤
8、error C2361:initialization of
error C2361: initialization of 'iter2' is skipped by 'default' label
解決辦法:出現(xiàn)這個(gè)問(wèn)題原因是因是switch沒(méi)有正常的初始化,只需要在iter2的位置控制其作用域即可,在這里添加{}就可以了。
案例分析:來(lái)自實(shí)際項(xiàng)目的一段代碼,簡(jiǎn)化形式如下:
switch (t)
{
case 0:
int a = 0;
break;
default:
break;
}
有什么問(wèn)題嗎?似乎沒(méi)有。請(qǐng)用編譯器編譯一下……
嗯?!一個(gè)錯(cuò)誤“error C2361: initialization of 'a' is skipped by 'default' label”。這怎么可能?
幾番思琢,悟出解釋?zhuān)?BR>C++約定,在塊語(yǔ)句中,對(duì)象的作用域從對(duì)象的聲明語(yǔ)句開(kāi)始直到塊語(yǔ)句的結(jié)束,也就是說(shuō)default標(biāo)號(hào)后的語(yǔ)句是可以使用對(duì)象a的。
如果程序執(zhí)行時(shí)從switch處跳到default處,就會(huì)導(dǎo)致對(duì)象a沒(méi)有被正確地初始化。
確保對(duì)象的初始化可是C++的重要設(shè)計(jì)哲學(xué),所以編譯器會(huì)很?chē)?yán)格地檢查這種違例情況,像上述的示例代碼中default語(yǔ)句后面并沒(méi)有使用a,
但考慮到以后代碼的改動(dòng)可能無(wú)意中使用,所以一樣被封殺。
明白了原因,解決起來(lái)就很容易了。只要明確地限制對(duì)象a的作用域就行了。
switch (t)
{
case 0:
{ //added for fix problem
int a = 0;
break;
} //added for fix problem
default:
break;
}
在switch...case...結(jié)構(gòu)中不能在case中定義新變量,for(int i = 0;...)
除非將定義新變量的case用塊{}包住,或者選擇將你的新變量在switch之前。
9、Link2019:unresolved external symbol 'symbol' referenced in function 'function'
函數(shù)只有申明,沒(méi)有實(shí)現(xiàn)時(shí),或是DLL中的函數(shù)沒(méi)有export
1、error c101008a解決方法
該錯(cuò)誤出現(xiàn)在項(xiàng)目升級(jí)過(guò)程中會(huì)出現(xiàn),比如說(shuō)項(xiàng)目從vs2008升級(jí)到vs2010.
解決辦法:在項(xiàng)目上點(diǎn)右鍵,清理(Clean),重新編譯,問(wèn)題解決
2、error C2252解決方法
該錯(cuò)誤主要在項(xiàng)目從vs2008升級(jí)到vs2010出先。
error C2252: an explicit instantiation of a template can only occur at namespace scope
解決方法:將特例話(huà)的模板移到類(lèi)外面(It is saying that you cannot explicitly instantiate a template inside a function or a class.Move it to outside the function or class.)
3、error C2143:語(yǔ)法錯(cuò)誤:缺少“;”(在“*”的前面)
該錯(cuò)誤主要是某類(lèi)型數(shù)據(jù)未include,可能是都文件拼寫(xiě)錯(cuò)誤、或者頭文件名已經(jīng)更改、或是頭文件忘記“;”
解決辦法:檢查頭文件是否更名、是否忘記結(jié)束的“;”
4、error C1010:查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。是否忘記了向源中添加“#include "StdAfx.h”
解決辦法:在報(bào)錯(cuò)行所在的文件的最前面添加“#include "StdAfx.h”
5、error C1189:出現(xiàn)了WINDOWS.H already included. MFC apps must not #include <windows.h>的處理辦法。
解決辦法:把#include<afxwin.h>提到最前面去就可以編譯成功了。
6、error LNK2005: _DllMain@12 already defined in dllmain.obj
解決辦法:你只需要在工程設(shè)置里面把WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,MSGBOX_EXPORTS,_WINDLL,_AFXDLL
中的_USRDLL,刪除,就可以正確編譯了
7、R6010錯(cuò)誤,出現(xiàn)R6010錯(cuò)誤的原因很多
1、數(shù)據(jù)庫(kù)缺少一個(gè)視圖、
2、數(shù)據(jù)庫(kù)某個(gè)存儲(chǔ)過(guò)程名發(fā)生變化,也可能是參數(shù)個(gè)數(shù)發(fā)生變化。
3、exe和dll是否混用的不同版本的crt
4、內(nèi)存資源未釋放
5、輸出參數(shù)不正確
總之:windows將自身無(wú)法定位到的錯(cuò)誤類(lèi)型都?xì)w結(jié)為R6010錯(cuò)誤
8、error C2361:initialization of
error C2361: initialization of 'iter2' is skipped by 'default' label
解決辦法:出現(xiàn)這個(gè)問(wèn)題原因是因是switch沒(méi)有正常的初始化,只需要在iter2的位置控制其作用域即可,在這里添加{}就可以了。
案例分析:來(lái)自實(shí)際項(xiàng)目的一段代碼,簡(jiǎn)化形式如下:
switch (t)
{
case 0:
int a = 0;
break;
default:
break;
}
有什么問(wèn)題嗎?似乎沒(méi)有。請(qǐng)用編譯器編譯一下……
嗯?!一個(gè)錯(cuò)誤“error C2361: initialization of 'a' is skipped by 'default' label”。這怎么可能?
幾番思琢,悟出解釋?zhuān)?BR>C++約定,在塊語(yǔ)句中,對(duì)象的作用域從對(duì)象的聲明語(yǔ)句開(kāi)始直到塊語(yǔ)句的結(jié)束,也就是說(shuō)default標(biāo)號(hào)后的語(yǔ)句是可以使用對(duì)象a的。
如果程序執(zhí)行時(shí)從switch處跳到default處,就會(huì)導(dǎo)致對(duì)象a沒(méi)有被正確地初始化。
確保對(duì)象的初始化可是C++的重要設(shè)計(jì)哲學(xué),所以編譯器會(huì)很?chē)?yán)格地檢查這種違例情況,像上述的示例代碼中default語(yǔ)句后面并沒(méi)有使用a,
但考慮到以后代碼的改動(dòng)可能無(wú)意中使用,所以一樣被封殺。
明白了原因,解決起來(lái)就很容易了。只要明確地限制對(duì)象a的作用域就行了。
switch (t)
{
case 0:
{ //added for fix problem
int a = 0;
break;
} //added for fix problem
default:
break;
}
在switch...case...結(jié)構(gòu)中不能在case中定義新變量,for(int i = 0;...)
除非將定義新變量的case用塊{}包住,或者選擇將你的新變量在switch之前。
9、Link2019:unresolved external symbol 'symbol' referenced in function 'function'
函數(shù)只有申明,沒(méi)有實(shí)現(xiàn)時(shí),或是DLL中的函數(shù)沒(méi)有export
相關(guān)文章
C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼
這篇文章主要介紹了C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03C++ 關(guān)于MFC多線(xiàn)程編程的注意事項(xiàng)
這篇文章主要介紹了C++ 關(guān)于MFC多線(xiàn)程編程的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2015-06-06c++的virtual和override作用及說(shuō)明
這篇文章主要介紹了c++的virtual和override作用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11使用kendynet構(gòu)建異步redis訪(fǎng)問(wèn)服務(wù)
這篇文章主要介紹了在kendynet上寫(xiě)的一個(gè)簡(jiǎn)單的redis異步訪(fǎng)問(wèn)接口,大家參考使用吧2014-01-01C語(yǔ)言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)時(shí)區(qū)轉(zhuǎn)換函數(shù)的實(shí)例的相關(guān)資料,這里分析需求并提供實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08C語(yǔ)言+win32api寫(xiě)窗體應(yīng)用程序
本文給大家分享的是個(gè)人使用純C語(yǔ)言結(jié)合win32api制作窗體應(yīng)用程序的代碼,非常的簡(jiǎn)單,給需要的小伙伴參考下。2016-02-02C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之迷宮求解問(wèn)題
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之迷宮求解問(wèn)題,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03