这篇文章主要用来记录使用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
的那个类同名形成的,将函数同名函数或者同名变量名修改下就能够了。
解析:编辑器不是万能的,咱们不能自觉得编译器能够处理什么,而是要了解编译器处理逻辑,并知道哪些时编译器处理不了的。这个时候就很体现日常良好的编程习惯的好处了,咱们通常变量名会所有小写,类首字母大写,这样就彻底不会出现变量名和类名重名的状况。