這篇文章主要用來記錄使用Visual Studio過程當中,出現的各類error,並提供本身當時解決的方案。
可是,一個error可能由不用緣由引發的,文中案例僅供你們參考。c++
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
解決:將工程設置爲Using MFC in static library數據庫
cannot open file "mfc42u.lib"
解決:安裝vc時沒有安裝Unicode版本(默認是不安裝的),能夠下載幾個庫文件copy到vc98/MFC/Lib,或者build選擇非Unicode版本編譯(也能夠在Set Configuation中配置Unicode相關刪除)編程
fatal error RC1107: invalid usage; use RC /? for Help
解決:查看vc++目錄是否有問題
<1>將附加額外目錄暫時移至工程末尾
<2>把其中的反斜線(/)替換爲雙反斜線(//)或者替換爲斜線windows
LINK : fatal error LNK1000: Internal error during IncrBuildImage
解決:<1> 項目(Project)->屬性(Property)->連接器(Linker)->常規(General) 下面的「啓用增量連接(Enable Incremental Linking)」,將「是(/INCREMENTAL)」改成「否(/INCREMENTAL:NO)」。不過這又引入了另一個警 告:FormatCom.obj : warning LNK4075: 忽略「/EDITANDCONTINUE」(因爲「/INCREMENTAL:NO」規範)。
<2> 選擇項目,屬性(Property pages)->配置屬性(Configuration Properties) ->C/C++,修改「調試信息格式(Debug Information Format)」爲「程序數據庫(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個參數的函數
解決:多是運算符乘號未寫app
error c2228:"Grade"左邊必須有類/結構/聯合
解決:不必定是左邊的類結構問題,前一語句缺乏「;」也會致使這個錯誤。編輯器
error C2440: 「=」: 沒法從「const char [11]」轉換爲「LPCWSTR」
解決:vc6.0運行沒問題,vs2005以後默認Unicode字符集,可將其改成Muti-bye。ide
error LNK2019:沒法解析的外部符號 _main,該符號在函數 ___tmainCRTStartup 中被引用
解決:建錯工程了,應該是win32 application(window應用程序)
win32 application和win32 Console Application區別:
win32 application就是普通的常見的窗口應用程序
win32 Console Application就是MS-DOS窗口(命令提示符)函數
error C4996:'sprintf':This fuction or variable may be unsafe
解決:將‘sprintf’改成‘sprintf_s’,警告就不會再有了。
不少函數不進行參數檢測(越界類等...),微軟擔憂使用這些會形成內存異常,因此就改寫了一樣的功能的函數,改寫的函數進行了參數的檢測,使用這些新的函數會更安全和便捷。通常只需加_s就行。
error C2084: 函數「XXXXXX「已有主體
解決:檢查是否有重名的函數定義
error C2065:'hInstance,NULL' : undeclared identifier
解決:主要是「,」是中文字符照成的,可能還會報warning C4003: not enough actual parameters for macro 'CreateWindowA'錯
致命錯誤 RC1015: 沒法打開包含文件 'afxres.h'
解決:實際上這個問題不少狀況下是因爲路徑設置的問題引發的
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常常會使彈出內存操做錯誤
解決:理清程序結構,找到漏寫的返回值。
First-chance exception in main.exe: 0xC0000005: Access Violation.
解決:訪問違例,使用空間,可是未申請,也可能在使用以前被delete了。
LINK : fatal error LNK1168: cannot open Debug/ling.exe for writing
解決:結束ling.exe進程。
error LNK2001: 沒法解析的外部符號 "public: void __thiscall CSketcherView::OnColorBlack
解決:OnColorBlack在源文件中未寫
菜單響應函數消息類型不見了!
解決:直接刪除.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文件夾內容所有刪除
調試錯誤 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
解決: 頭文件裏少告終尾的回車
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)
解決:虛函數格式錯誤,必須在源文件函數後加{}
x.exe中的0x77dd15de處有未經處理的異常:0xC015000F:正被停用的激活上下文不是最近激活的
解決:在Visual Studio中,選擇Debug | Exceptions菜單項,在彈出的對話框中,勾選全部的Win32 Exceptions。這樣就有機會在第一時間(異常處理前)看到本身的代碼中發生了什麼錯誤而致使拋出異常,從而改正錯誤,消除程序中的隱患。
(注:多是析構函數中釋放並未初始化的變量)
在VC++6.0中出現failed to (or don't know how to) build 'D:\VC98\MFC\SRC\APPMODUL.CPP'
解決:系統目錄設置問題:找到××.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編譯器環境中directdraw包含文件和包含庫調至默認庫下方.
vs中會先加載項目屬性中的包含文件和庫,再加載vs自己配置的屬性。
因此,致使有些對庫包含順序有要求的庫文件出錯。——也就是說,directdraw不能在項目屬性中設置
LINK :fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
解決:項目-->工程屬性->配置屬性-> 清單工具->輸入和輸出->嵌入清單,選擇[否]
fatal error C1033: cannot open program database 'e:\實驗室工程\newassistivev
解決:將文件夾換成可讀寫狀態
fatal error C1001: An internal error has occurred in the compiler.
解決:將解決方案清理,再重建(由於解決方案不是最新的)
彈出不能找到「SpeechRecognizeBase.h」等文件
解決:將項目屬性的連接和附加目錄修改好
fatal error C1083:NO such file or directory
解決:項目屬性附加目錄添加:$(ProjectDir),表示當前工程目錄
顯示未聲明某變量
解決:確認是否有,若是其在另外一關聯文件定義了,注意要用extern聲明該變量。
斷點無效
解決:1)清空生成的解決方案,從新生成
2)將工具->選項->調試裏->常規 找到 要求原文件與原始版本徹底匹配 不要打勾
(此方法最後試用)
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 錯誤
解決:在項目-》屬性-》配置屬性-》連接器-》系統,將堆棧保留大小弄大點,如50M(52428800)是堆過小加載溢出(如數組buffer定義的太大就會形成此現象)
error C2065: 'IDD_DIALOG_WNDSIZE': undeclared identifier
解決:將resources.h包含到該對話框頭文件中來
當編譯後,按F5進行調試,斷點無效(或有效,可是位置亂跳)
解決:勾選 工具-》調試-》常規 要求源文件與原始版本徹底匹配
程序經過VS編譯器F5運行能夠,直接點擊exe運行不正常
解決:寫絕對路徑,問題就會消失。
缺省狀況下:調試時使用的工做目錄是你的項目所在的目錄。而直接運行時,是你的可執行文件所在的目錄。
(有則有,無則無,不會無中生有,定是另有乾坤)
加入某些資源文件在最終程序中是有效果的,可是又用vs搜尋其ID不到
解決:清理解決方案,從新生成解決方案
cannot convert parameter 1 from 'const char *' to 'LPCWSTR'
解決:將字符串用_T()轉換或修改字符集爲多字節字符集(vs05默認爲UNICODE)
注:_T()包含在tchar頭文件裏
error C4430: missing type specifier - int assumed. Note: C++ does not
解決:給函數聲明加上返回類型
注:vc6.0默認類型爲int型,而vs不會這麼作,因此會報錯。
放在桌面(win8)的工程文件沒法生成動態連接庫DLL
解決:將工程移置其餘目錄嘗試
(未知根源,關閉工程時還會報沒法保存項目設置信息)
生成的dll沒法起到效果
解決:注意系統有分64和32,64位程序必須調用64的dll
(用相應的平臺生成dll文件)
warning C4786: std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::basic_string<char,std:: char_traits<char>,std::allocator<char> > const &,std::basi。。。
解決:在#include <vector>前加上 #pragma warning(disable:4786),強制去除警告
注:vc6.0對vector支持不是很好,因此纔會出現此警告。
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
解決:通常是指針訪問越界致使的,仔細檢查是否有內存寫入失敗,依然會看成成功取獲取指針,並讀取未寫入任何信息的內存控件。
error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
解決:將「Configuration」-「General」中Configuration Type修改成Dynamic Library(.dll)
緣由:因爲本身是要編譯DLL工程,沒有相應的啓動入口函數。
error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead.
解決:在預處理器定義中添加_CRT_SECURE_NO_WARNINGS
或者新建工程時不勾選:安全開發生命週期(SDL)檢查
緣由:由於不少版本都沒有使用安全函數,爲減小改動,關閉相關檢查。
new xxx
一個自建類時,彈錯:應輸入類型說明符
。
解決:這種狀況基本時函數或變量名與new
的那個類同名形成的,將函數同名函數或者同名變量名修改下就能夠了。
解析:編輯器不是萬能的,咱們不能自覺得編譯器能夠處理什麼,而是要了解編譯器處理邏輯,並知道哪些時編譯器處理不了的。這個時候就很體現日常良好的編程習慣的好處了,咱們通常變量名會所有小寫,類首字母大寫,這樣就徹底不會出現變量名和類名重名的狀況。