调试错误解决方案之VC++
文|Seraph
這篇文章主要用來記錄使用Visual Studio過程中,出現(xiàn)的各種error,并提供自己當時解決的方案。
但是,一個error可能由不用原因引起的,文中案例僅供大家參考。
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
解決:將工程設(shè)置為Using MFC in static library
cannot open file “mfc42u.lib”
解決:安裝vc時沒有安裝Unicode版本(默認是不安裝的),可以下載幾個庫文件copy到vc98/MFC/Lib,或者build選擇非Unicode版本編譯(也可以在Set Configuation中配置Unicode相關(guān)刪除)
fatal error RC1107: invalid usage; use RC /? for Help
解決:查看vc++目錄是否有問題
<1>將附加額外目錄暫時移至工程末尾
<2>把其中的反斜線(/)替換為雙反斜線(//)或者替換為斜線
LINK : fatal error LNK1000: Internal error during IncrBuildImage
解決:<1> 項目(Project)->屬性(Property)->鏈接器(Linker)->常規(guī)(General) 下面的“啟用增量鏈接(Enable Incremental Linking)”,將“是(/INCREMENTAL)”改為“否(/INCREMENTAL:NO)”。不過這又引入了另外一個警 告:FormatCom.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”規(guī)范)。
<2> 選擇項目,屬性(Property pages)->配置屬性(Configuration Properties) ->C/C++,修改“調(diào)試信息格式(Debug Information Format)”為“程序數(shù)據(jù)庫(Program Database(/Zi))”即可。
LINK1123:failure during conversion to COFF:file invalid or corrup
解決:將C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\cvtres.exe目錄下的cvtres.exe文件用C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe代替
error c2064:項不會計算為接受1個參數(shù)的函數(shù)
解決:可能是運算符乘號未寫
error c2228:"Grade"左邊必須有類/結(jié)構(gòu)/聯(lián)合
解決:不一定是左邊的類結(jié)構(gòu)問題,前一語句缺少“;”也會導致這個錯誤。
error C2440: “=”: 無法從“const char [11]”轉(zhuǎn)換為“LPCWSTR”
解決:vc6.0運行沒問題,vs2005之后默認Unicode字符集,可將其改為Muti-bye。
error LNK2019:無法解析的外部符號 _main,該符號在函數(shù) ___tmainCRTStartup 中被引用
解決:建錯工程了,應該是win32 application(window應用程序)
win32 application和win32 Console Application區(qū)別:
win32 application就是普通的常見的窗口應用程序
win32 Console Application就是MS-DOS窗口(命令提示符)
error C4996:‘sprintf’:This fuction or variable may be unsafe
解決:將‘sprintf’改為‘sprintf_s’,警告就不會再有了。
很多函數(shù)不進行參數(shù)檢測(越界類等…),微軟擔心使用這些會造成內(nèi)存異常,所以就改寫了同樣的功能的函數(shù),改寫的函數(shù)進行了參數(shù)的檢測,使用這些新的函數(shù)會更安全和便捷。一般只需加_s就行。
error C2084: 函數(shù)“XXXXXX“已有主體
解決:檢查是否有重名的函數(shù)定義
error C2065:‘hInstance,NULL’ : undeclared identifier
解決:主要是“,”是中文字符照成的,可能還會報warning C4003: not enough actual parameters for macro 'CreateWindowA’錯
致命錯誤 RC1015: 無法打開包含文件 ‘a(chǎn)fxres.h’
解決:實際上這個問題很多情況下是由于路徑設(shè)置的問題引起的
**executatble files:**C:\Program Files\Microsoft Visual Studio\Common\MSDev98\BinC:\Program Files\Microsoft Visual Studio\VC98\BINC:\Program Files\Microsoft Visual Studio\Common\TOOLSC:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNT
**include files:**C:\Program Files\Microsoft Visual Studio\VC98\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
**library files:**C:\Program Files\Microsoft Visual Studio\VC98\LIBC:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB
**source files:**C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRCC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
error C2065: ‘xxxxxxxx’:undeclared identifier
解決:很多是因為“;”或者其他符號是中文下輸入,造成的。
error C2653: is not a class or namespace name
解決:沒建立一個新類都要在.cpp文件中加入#include “stdafx.h”,而且要加在第一行,
編譯器通過一個頭文件stdafx.h 來使用預編譯頭文件。
缺失return經(jīng)常會使彈出內(nèi)存操作錯誤
解決:理清程序結(jié)構(gòu),找到漏寫的返回值。
First-chance exception in main.exe: 0xC0000005: Access Violation.
解決:訪問違例,使用空間,但是未申請,也可能在使用之前被delete了。
LINK : fatal error LNK1168: cannot open Debug/ling.exe for writing
解決:結(jié)束ling.exe進程。
error LNK2001: 無法解析的外部符號 "public: void __thiscall CSketcherView::OnColorBlack
解決:OnColorBlack在源文件中未寫
菜單響應函數(shù)消息類型不見了!
解決:直接刪除.ncb文件
error LNK2019 : unresolved external symbol __imp__PlaySoundW@12 referenced in function _WinMain@16
解決:#pragma comment(lib,“winmm.lib”)
please enter the path for mfcs42d.pdb
解決:將debug文件夾內(nèi)容全部刪除
調(diào)試錯誤 ASSERTE(_CrtIsValidHeapPointer(pUserData))
解決:delete 野指針前給指針賦空
無法啟動此程序 ,因為計算機中丟失MFC80UD.DLL
解決:把工程debug下文件全部刪除,然后rebulid project
VC6.0 error LNK2001: unresolved external symbol _main
解決:[Project] --> [Settings] --> 選擇"Link"屬性頁, 在Project Options中將/subsystem:console改成/subsystem:windows
fatal error RC1004: unexpected end of file found
解決: 頭文件里少了結(jié)尾的回車
vc助手寫到一般時突然沒有提示了
解決:可能是前面有哪句寫錯了,然后導致后面識別的全是字符
File f:/dd/vctools/vc7libs/ship/atlmfc/src/mfc/viewscrl.cpp, Line 385
解決:需要在類開時時,增加SetScrollSizes ( MM_TEXT,CSize (0 , 0 ) );
error C2668: ‘sqrt’ : ambiguous call to overloaded function
解決:sqrt處理類型必須是double
error C2144:syntax error : ‘char’ should be preceded by ‘;’
解決:如果在 a.h 里缺少分號, 則編譯器會在 b.h 中會提示錯誤. 所以要在 a.h 中找錯誤
<dshow.h>無法打開
解決:vs編譯器沒有包含dx的drawshow中的include、lib
fatal error C1001: An internal error has occurred in the compiler.
解決:清理解決方案,然后build
源文件與模塊生成時的文件不同
解決:清空解決方案,重新生成解決方案
error LNK2001: 無法解析的外部符號 “public: virtual void __thiscall CDib::GetTmplPos(void)” (?GetTmplPos@CDib@@UAEXXZ)
解決:虛函數(shù)格式錯誤,必須在源文件函數(shù)后加{}
x.exe中的0x77dd15de處有未經(jīng)處理的異常:0xC015000F:正被停用的激活上下文不是最近激活的
解決:在Visual Studio中,選擇Debug | Exceptions菜單項,在彈出的對話框中,勾選所有的Win32 Exceptions。這樣就有機會在第一時間(異常處理前)看到自己的代碼中發(fā)生了什么錯誤而導致拋出異常,從而改正錯誤,消除程序中的隱患。
(注:可能是析構(gòu)函數(shù)中釋放并未初始化的變量)
在VC++6.0中出現(xiàn)failed to (or don’t know how to) build ‘D:\VC98\MFC\SRC\APPMODUL.CPP’
解決:系統(tǒng)目錄設(shè)置問題:找到××.dsp文件(××為工程名),用記事本打開,找到如下:SOURCE=“D:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\APPMODUL.CPP” # End Source File # Begin Source File對SOURCE修改。
error C2146: syntax error : missing ‘;’ before identifier ‘PVOID64’
解決:將VS編譯器環(huán)境中directdraw包含文件和包含庫調(diào)至默認庫下方.
vs中會先加載項目屬性中的包含文件和庫,再加載vs本身配置的屬性。
所以,導致有些對庫包含順序有要求的庫文件出錯?!簿褪钦f,directdraw不能在項目屬性中設(shè)置
LINK :fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
解決:項目–>工程屬性->配置屬性-> 清單工具->輸入和輸出->嵌入清單,選擇[否]
fatal error C1033: cannot open program database 'e:\實驗室工程\newassistivev
解決:將文件夾換成可讀寫狀態(tài)
fatal error C1001: An internal error has occurred in the compiler.
解決:將解決方案清理,再重建(因為解決方案不是最新的)
彈出不能找到“SpeechRecognizeBase.h”等文件
解決:將項目屬性的鏈接和附加目錄修改好
fatal error C1083:NO such file or directory
解決:項目屬性附加目錄添加:$(ProjectDir),表示當前工程目錄
顯示未聲明某變量
解決:確認是否有,如果其在另一關(guān)聯(lián)文件定義了,注意要用extern聲明該變量。
斷點無效
解決:1)清空生成的解決方案,重新生成
2)將工具->選項->調(diào)試里->常規(guī) 找到 要求原文件與原始版本完全匹配 不要打勾
(此方法最后試用)
vc80.pdb
解決:將文件路徑全部改成英文
error C2143: syntax error : missing ‘;’ before ‘<’
error C2433: ‘CDib:: vector’ : ‘virtual’ not permitted on data declarations
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ‘;’
解決:使用vector,未寫using namespace std;
LINK : fatal error LNK1104: 無法打開文件“ejTTS.lib”
解決:將鏈接器中的附加庫目錄修改為正確的路徑
chkstk.asm 錯誤
解決:在項目-》屬性-》配置屬性-》鏈接器-》系統(tǒng),將堆棧保留大小弄大點,如50M(52428800)是堆太小加載溢出(如數(shù)組buffer定義的太大就會造成此現(xiàn)象)
error C2065: ‘IDD_DIALOG_WNDSIZE’: undeclared identifier
解決:將resources.h包含到該對話框頭文件中來
當編譯后,按F5進行調(diào)試,斷點無效(或有效,但是位置亂跳)
解決:勾選 工具-》調(diào)試-》常規(guī) 要求源文件與原始版本完全匹配
程序通過VS編譯器F5運行可以,直接點擊exe運行不正常
解決:寫絕對路徑,問題就會消失。
缺省情況下:調(diào)試時使用的工作目錄是你的項目所在的目錄。而直接運行時,是你的可執(zhí)行文件所在的目錄。
(有則有,無則無,不會無中生有,定是另有乾坤)
加入某些資源文件在最終程序中是有效果的,但是又用vs搜尋其ID不到
解決:清理解決方案,重新生成解決方案
cannot convert parameter 1 from ‘const char *’ to ‘LPCWSTR’
解決:將字符串用_T()轉(zhuǎn)換或修改字符集為多字節(jié)字符集(vs05默認為UNICODE)
注:_T()包含在tchar頭文件里
error C4430: missing type specifier - int assumed. Note: C++ does not
解決:給函數(shù)聲明加上返回類型
注:vc6.0默認類型為int型,而vs不會這么做,所以會報錯。
放在桌面(win8)的工程文件無法生成動態(tài)鏈接庫DLL
解決:將工程移置其他目錄嘗試
(未知根源,關(guān)閉工程時還會報無法保存項目設(shè)置信息)
生成的dll無法起到效果
解決:注意系統(tǒng)有分64和32,64位程序必須調(diào)用64的dll
(用相應的平臺生成dll文件)
warning C4786: std::reverse_iterator<std::basic_string<char,std::char_traits,std::allocator > const *,std::basic_string<char,std::char_traits,std::allocator >,std::basic_string<char,std:: char_traits,std::allocator > const &,std::basi。。。
解決:在#include 前加上 #pragma warning(disable:4786),強制去除警告
注:vc6.0對vector支持不是很好,所以才會出現(xiàn)此警告。
please enter the path for mfcs42d.pdb 提示解決方法
解決:Project settings | Link | Debug, 不選 “Separate types”。然后,rebuild all。重新把Separate types 勾選上。
59.LINK : fatal error LNK1104: 無法打開文件“Log.lib xxx.lib xxx.lib”
解決:VS10庫包含之間是用“;”隔離開來的,VC6.0是用空格。
R6010 abort() has been called
解決:一般是指針訪問越界導致的,仔細檢查是否有內(nèi)存寫入失敗,依然會當作成功取獲取指針,并讀取未寫入任何信息的內(nèi)存控件。
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
解決:將“Configuration”-“General”中Configuration Type修改為Dynamic Library(.dll)
原因:由于自己是要編譯DLL工程,沒有相應的啟動入口函數(shù)。
error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead.
解決:在預處理器定義中添加_CRT_SECURE_NO_WARNINGS
或者新建工程時不勾選:安全開發(fā)生命周期(SDL)檢查
原因:因為很多版本都沒有使用安全函數(shù),為減少改動,關(guān)閉相關(guān)檢查。
new xxx一個自建類時,彈錯:應輸入類型說明符。
解決:這種情況基本時函數(shù)或變量名與new的那個類同名造成的,將函數(shù)同名函數(shù)或者同名變量名修改下就可以了。
解析:編輯器不是萬能的,我們不能自以為編譯器可以處理什么,而是要了解編譯器處理邏輯,并知道哪些時編譯器處理不了的。這個時候就很體現(xiàn)平常良好的編程習慣的好處了,我們一般變量名會全部小寫,類首字母大寫,這樣就完全不會出現(xiàn)變量名和類名重名的情況。
VC轉(zhuǎn)VS工程出現(xiàn):LINK : fatal error LNK1117: 選項“mapinfo:lines”中的語法錯誤。
解決:配置屬性-鏈接器-命令行右側(cè)的附加選項刪除mapinfo:lines。
error LNK2019: 無法解析的外部符號 _GetIfEntry@4 ,
解決:缺失鏈接庫,添加#pragma comment(lib, "IPHlpApi.lib")。
使用CArray數(shù)組,報 afxtempl.h Line:254錯誤。
解決:可能是數(shù)組越界導致。不一定是指CArray本身,程序任何地方數(shù)組越界,都可能不可預知的錯誤。
error C4996: ‘GetVersionExA’: 被聲明為已否決。
解決:將Project Properties > Configuration Properties > C/C++ > General > SDL checks關(guān)掉。
error C2872: “ACCESS_MASK”: 不明確的符號。
解決:Opencv的域名沖突。注釋掉所有的using namespace cv,使用域名引用cv::。
找不到 Windows SDK 版本8.1。請安裝所需的版本的 Windows SDK 或者在項目屬性頁中或通過右鍵單擊解決方案并選擇“重定解決方案目標”來更改 SDK 版本。
解決:右鍵項目屬性,選擇重定向項目,在彈出的對話框中,選擇我們的SDK版本?;蛘咧g安裝8.1版本的SDK。
每一天都是一個新的日子。走運當然是好的,不過我情愿做到分毫不差。這樣,運氣來的時候,你就有所準備了。------《老人與?!?/p>
總結(jié)
以上是生活随笔為你收集整理的调试错误解决方案之VC++的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (七)整合spring cloud云服务
- 下一篇: [讲课视频]谈谈C/C++中的整数