VC++常见错误提示
- 格式:ppt
- 大小:622.50 KB
- 文档页数:22
VC中常见的一些编译链接错误的解决VC中常见的一些编译链接错误的解决2010-03-22 15:59问题1:Linking...nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexlibcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main答VC++默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。
选择菜单“Project|settings”,选择C/C++标签,在CODEGENERATION分类中选择除SINGLE-THREADED的其他选择。
比如可以在Use run-time library中选择Debug Multithreaded 或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本) Multithreaded 多线程静态链接库(release版本) multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用问题2fatal error C1010: unexpected end of file while looking for precompiled header directive该如何解如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiledheaders。
1.程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。
程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。
1.1编译错误编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。
例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。
编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。
我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。
只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。
改正编译错误的关键是要能正确理解编译器给出的编译错误信息。
VC++环境中的编译、链接错误信息是用英文表示的。
对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。
通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。
这样能够避免被株连错误迷惑。
值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。
例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。
1.2运行时错误运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。
当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。
例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。
1.3逻辑错误逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。
VC编译常见错误- -1、Fatal Error C1010unexpected end of file while looking for precompiled header di rective这一般是由于使用了参数/Yu"stdafx.h",意思是在每个文件中都应该使用#include来包含这个头文件。
一般改正,就是在每个。
CPP文件中包含这个文件就可以。
2、LNK2001 on __beginthreadex and __endthreadex这是一个非常常见的链接错误。
原因是由于在VC3。
0以后所有的M FC类都是线程安全的,在MFC类库中使用了Thread Local Stora ge (TLS)提供预处理的数据。
因此如果程序中包含了"stfafx.h"头文件或者使用了,MFC类库中的类就会使用MSVCRTx0.DLL 来进行链接。
改正方法如下:On Visual C 2.x, 5.0, and 6.0:Select the Project menu, and then continue Steps 2 throug h 5 below.On Visual C 4.x:Select the Build menu.Select the Settings... option.Select the C/C++ tab.Select Code Generation on the Category list box.Finally, make a selection other than Single-Threaded on th e Use Run Time Library list box.如果使用了"Multithreaded using DLL"方式还要求在预处理符号中加上_AFXDLL 符号.还在LIBC。
LIB是C Runtime的静态链接库。
VC中GetLastErro返回的错误码〖0〗-操作成功完成。
〖1〗-功能错误。
〖2〗-系统找不到指定的⽂件。
〖3〗-系统找不到指定的路径。
〖4〗-系统⽆法打开⽂件。
〖5〗-拒绝访问。
〖6〗-句柄⽆效。
〖7〗-存储控制块被损坏。
〖8〗-存储空间不⾜,⽆法处理此命令。
〖9〗-存储控制块地址⽆效。
〖10〗-环境错误。
〖11〗-试图加载格式错误的程序。
〖12〗-访问码⽆效。
〖13〗-数据⽆效。
〖14〗-存储器不⾜,⽆法完成此操作。
〖15〗-系统找不到指定的驱动器。
〖16〗-⽆法删除⽬录。
〖17〗-系统⽆法将⽂件移到不同的驱动器。
〖18〗-没有更多⽂件。
〖19〗-介质受写⼊保护。
〖20〗-系统找不到指定的设备。
〖21〗-设备未就绪。
〖22〗-设备不识别此命令。
〖23〗-数据错误 (循环冗余检查)。
〖24〗-程序发出命令,但命令长度不正确。
〖25〗-驱动器⽆法找出磁盘上特定区域或磁道的位置。
〖26〗-⽆法访问指定的磁盘或软盘。
〖27〗-驱动器找不到请求的扇区。
〖28〗-打印机缺纸。
〖29〗-系统⽆法写⼊指定的设备。
〖30〗-系统⽆法从指定的设备上读取。
〖31〗-连到系统上的设备没有发挥作⽤。
〖32〗-进程⽆法访问⽂件,因为另⼀个程序正在使⽤此⽂件。
〖33〗-进程⽆法访问⽂件,因为另⼀个程序已锁定⽂件的⼀部分。
〖36〗-⽤来共享的打开⽂件过多。
〖38〗-到达⽂件结尾。
〖39〗-磁盘已满。
〖50〗-不⽀持⽹络请求。
〖51〗-远程计算机不可⽤。
〖52〗-在⽹络上已有重复的名称。
〖53〗-找不到⽹络路径。
〖54〗-⽹络忙。
〖55〗-指定的⽹络资源或设备不再可⽤。
〖56〗-已到达⽹络 BIOS 命令限制。
〖57〗-⽹络适配器硬件出错。
〖58〗-指定的服务器⽆法运⾏请求的操作。
〖59〗-发⽣意外的⽹络错误。
〖60〗-远程适配器不兼容。
〖61〗-打印机队列已满。
〖62〗-⽆法在服务器上获得⽤于保存待打印⽂件的空间。
〖63〗-删除等候打印的⽂件。
VC++6.0系统开发环境在Windows 98/2000/XP操作系统中正确安装了Visual C++ 6.0后,可以启动Visual C++6.0系统。
第一次运行时,将显示出“Tip of the Day”对话框,单击“Next”命令按钮,可看到有关各种操作的提示;如果不选中“Show tips at startup”复选框,那么以后运行Visual C++ 6.0时将不再出现此对话框。
单击“Close”命令按钮关闭此对话框,进入Visual C++6.0系统开发环境。
1 开发环境的菜单功能Visual C++6.0开发环境界面由标题栏、菜单栏、工具栏、项目工作区窗口、文档窗口、输出窗口以及状态栏等组成。
在开发环境界面中,可以看到在它的上方排列着一系列菜单,如图1所示,而每一个菜单下都有各自的菜单命令。
在进一步与开发环境打交道之前,先了解各个菜单命令的基本功能是很有必要的,因为大部分的操作都是通过菜单来完成的。
图 1 VC++主菜单栏1. File莱单File菜单中的命令主要用来对文件和项目进行操作,如“新建”、“打开”、“保存”、“打印”等。
其中各项命令的功能描述如表1所示。
表 1 File菜单命令的快捷键及功能描述菜单命令快捷键功能描述New Ctrl+N 创建一个新项目或文件Open Ctrl+O 打开已有的文件Close 关闭当前被打开的文件Open Workspace 打开一个已有的项目Save Workspace 保存当前项目Close Workspace 关闭当前项目Save Ctrl+S 保存当前文件Save As 将当前文件用新文件名保存Save All 保存所有打开的文件Page Setup 文件打印的页设置(续表)菜单命令快捷键功能描述Print Ctrl+P 打印当前文件内容或选定的当前内容Recent Files 选择打开最近的文件Recent Workspace 选择打开最近的项目Exit 退出Visual C++6.0开发环境2. Edit菜单Edit菜单中的命令用来使用户方便快捷地编辑文件内容,如进行删除、复制等操作,其中大多数命令功能与Windows中标准字处理程序的编辑命令一致,各项命令的快捷键及它们的功能描述如表2所示。
Visual C++ 6.0编程环境的使用目录4 编译与链接过程中常见的出错提示 (1)4.1编译、链接问题的解决方法 (1)(1)努力读懂VC报告的错误与警告信息 (1)(2)定位问题所在行 (1)(3)解决问题的方法 (1)(4)避免被VC误导 (1)(5)编译链接问题的解决不代表程序正确 (2)4.2常用单词与术语 (2)4.3常见编译错误信息 (4)(1)error C2001: newline in constant (4)(2)error C2017: illegal escape sequence (4)(3)error C2015: too many characters in constant (4)(4)error C2137: empty character constant (5)(5)error C2018: unknown character '0x##' (5)(6)error C2041: illegal digit '#' for base '8' (5)(7)error C2065: 'xxxx' : undeclared identifier (5)(8)error C2086: 'xxxx' : redefinition (6)(9)error C2374: 'xxxx' : redefinition; multiple initialization (6)(10)error C2143: syntax error : missing ';' before (identifier) 'xxxx'或before 'type' (6)(11)error C4716: 'xxx' : must return a value (7)(12)error C2006: #include expected a filename, found '(' / found 'identifier' / found 'newline' (7)(13) error C2039: 'aver' : is not a member of 'STU' (7)(14)error C2043: illegal break (7)(15)error C2046: illegal case / error C2047: illegal default (8)(16)error C2050: switch expression not integral (8)(17)error C2051: case expression not constant (8)(18)error C2079: 'da' uses undefined struct 'data' (8)(19)error C2081: 'num2' : name in formal parameter list illegal (9)(20)error C2122: 'num2' : prototype parameter in name list illegal (9)(21)error C2082: redefinition of formal parameter 'aver' (9)(22)error C2172: 'fread' : actual parameter is not a pointer : parameter 1 (9)(23)error C2198: 'FindMin' : too few actual parameters (10)(24)error C2087: '<Unknown>' : missing subscript (10)(25)error C2133: 'num' : unknown size (10)(26)error C2106: '=' : left operand must be l-value (10)(27)error C2108: subscript is not of integral type (10)(28)error C2109: subscript requires array or pointer type (10)(29)error C2181: illegal else without matching if (11)(30)error C2296: '%' : illegal, left operand has type 'double ' (11)(31)fatal error C1004: unexpected end of file found (11)(32)fatal error C1021: invalid preprocessor command 'defint'/'hinclude' (11)(33)fatal error C1083: Cannot open include file: 'sdtio.h': No such file or directory (11)(34)error C2220: warning treated as error - no object file generated (11)4.4常见编译警告信息 (12)(1)warning C4129: 'm' : unrecognized character escape sequence (12)(2)warning C4508: 'main' : function should return a value; 'void' return type assumed (12)(3)warning C4098: 'change' : 'void' function returning a value (12)(4)warning C4700: local variable 'xxx' used without having been initialized (12)(5)warning C4013: 'print' undefined; assuming extern returning int (13)(6)warning C4047: '=' : 'int *' differs in levels of indirection from 'int ' (13)(7)warning C4024: 'fun' : different types for formal and actual parameter 2 (13)(8)warning C4133: 'function' : incompatible types - from 'int [128]' to 'char *' (13)(9)warning C4022: 'fread' : pointer mismatch for actual parameter 1 (14)(10)warning C4018: '<' : signed/unsigned mismatch (14)(11) warning C4305: '=' : truncation from 'const double ' to 'float ' (15)(12)warning C4553: '==' : operator has no effect; did you intend '='? (15)(13)warning C4715: 'fun' : not all control paths return a value (15)4.5常见链接错误 (16)(1)error LNK2001: unresolved external symbol _main (16)(2)error LNK2005: _main already defined in xxxx.obj (16)(3)fatal error LNK1168: cannot open Debug/P901.exe for writing (17)4.6T URBO C V2.0编译错误信息的英汉对照表 (17)4 编译与链接过程中常见的出错提示4.1 编译、链接问题的解决方法(1)努力读懂VC报告的错误与警告信息编译、链接过程中,主要由于初学和录入阶段的击键失误,VC经常会提示程序有错(语法和拼写问题,肯定不会指明算法有问题,否则就不用编程了)。
1.源文件名称
错误:2-3.txt
正确:2-3.c或2-3.cpp
2.同时编辑、运行多个源文件
错误:同时编辑、运行多个源文件,可是运行的总不是自己当前编辑的。
正确:每次只编辑、运行1个源文件。
3.VC出现故障
错误:不能编译、运行。
正确:先保存文件!按Ctrl+Alt+Del,启动任务管理器,点“进程”选项卡,找到MSDEV.EXE,点“结束进程”,点“是”即可。
4.修改代码后运行没有变化
错误:点“!”按钮时你选择了No。
正确:点“!”按钮时选择Yes。
5.编译时出现error,不能运行,不知道怎么办
正确:在output窗口中,找到第1个error,双击此行,看看提示信息,错误的位置大部分在此行及其之前的几行,剩下的就是你的英语水平了,不会就copy那些信息,去google或者百度。
第一个方法:你先搜索找到SHSQL.DLL看看能不能找到,找到了的话就把它复制到C:\windows\system32文件夹下,然后在"开始"->运行"中输入"regsvr32 SHSQL.DLL"来注册DLL文件.然后你再试一下导入工程看看成功没有参考/z/q159948704.htm第二个方法:装了VC 企业版,而后反安装时不正常,再安装别的版本的VC 就会出现,可以在注册表中删除如下项来解决:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\shsql.dll这个是因为没有正常反安装VC 企业版造成。
参考/wenda/thread?tid=0ee9a7ca9e53e5d5&clk=wttpcts第三个方法:找不到"SHSQL.dll"这个文件,只要在安装程序所在的文件夹内,搜索这个文件,然后复制到安装目录就可以了.步骤如下:比如说,安装程序所在文件夹为: E:\VS6EN安装路径为: C:\Program Files\Microsoft Visual Studio在"E:\VC6EN\COMMON\MSDEV98\BIN"文件夹下找到SHSQL.dll文件,复制后打开"C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin"文件夹,粘贴重新打开VC,前面的提示没有了,但是又提示找不到EESWT.dll或者NMSQL.dll 文件还是在上面的目录中找到这个文件,然后复制到安装目录下,若还提示有文件找不到,就仍然找提示的文件,然后复制文件到目标文件夹下。
再次重新打开VC,问题就解决了。
O(∩_∩)O~。
参考:/132676814.html。