VC++常见的错误及其解决方法
- 格式:doc
- 大小:26.00 KB
- 文档页数:3
VC6.0的路径设置错误而导致无法编译成功1.提示错误:Compiling... ,Error spawning cl.exe2.提示错误:fatal error C1083: Cannot open include file: 'FlowItem\flowchart.h': No such file or directory解决办法一:打开vc界面点击VC“TOOLS(工具)”—>“Option(选择)”—>“Directories(目录)”重新设置“Excutable Fils、Include Files、Library Files、Source Files”的路径。
下面是参考路径(如果是装在D盘的,Microsoft Visual Studio之后的路径要注意)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\WINNTinclude files:C:\Program Files\Microsoft Visual Studio\VC98\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDElibrary files:C:\Program Files\Microsoft Visual Studio\VC98\LIBC:\Program Files\Microsoft Visual Studio\VC98\MFC\LIBsource 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解决方法二:卸载vc6.0,然后在C盘装上,上面的路径是默认的,如果你装在C盘,就不会有路径的问题。
感言:真是久病成良医啊!1. C语言中出现 "Compiling... Error spawning cl.exe是什么意思?怎么解决?很多人在安装VC 6.0后有过点击“Compile或者“Build后被出现的"Compiling... ,Error spawning cl.exe错误提示给郁闷过。
很多人的选择是重装,实际上这个问题很多情况下是由于路径设置的问题引起的,"CL.exe是VC使用真正的编译器(编译程序),其路径在“ VC根目录Bin ”下面,你可以到相应的路径下找到这个应用程序。
因此问题可以按照以下方法解决:打开vc界面点击VC “TOOLS (工具)”一> “Optio n选择)”—> “ Directories(目录)"重新设置“ Excutable Fils Include Files、Library Files、Source Files的路径。
很多情况可能就一个盘符的不同(例如你的VC装在C,但是这些路径全部在D),改过来就OK 了。
如果你是按照初始路径安装VC6.0的,路径应为:executatble files:C:\Program Files'Microsoft Visual Studio'Commo n\MSDev98\Bi nC:\Program Files'Microsoft Visual Studio\VC98\BINC:\Program Files'Microsoft Visual Studio'Commo n'TOOLSC:\Program Files'Microsoft Visual Studio\Commo n\TOOLS\WINNTin clude files:C:\Program Files'Microsoft Visual Studio\VC98\INCLUDEC:\Program Files'Microsoft Visual Studio\VC98\MFC\INCLUDEC:\Program Files'Microsoft Visual Studio\VC98\ATL\INCLUDElibrary files:C:\Program Files'Microsoft Visual Studio\VC98\LIBC:\Program Files'Microsoft Visual Studio\VC98\MFC\LIBsource 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如果你装在其他盘里,则仿照其路径变通就行。
vc++6.0 打开、添加文件时报错的解决方法在使用Microsoft Visual c++ 6.0的时候会遇到这样一个烦人的问题,无论是工具栏上的打开按钮还是通过文件->打开都不能打开文件,也不能在项目中添加文件,症状表现为无响应或者更严重的是出现提示:在0x5003eaed DEVSHL.DLL 中访问冲突(0xC0000005)。
DevShl.Dll 引用在0x0000000的内存。
无法读取该内存。
并且vc6.0直接死掉,无论重装零碎还是重装vc6都无济于事。
下面给出了解决的办法。
一编译FileTool首先从微软官网下载FileTool.exe/download/vc60ent/s1/6.0/w9xnt4/en-us/FileTool.exe 然后双击解压或者右键利用winRar解压进入解压后目录,里面是一些程序文件,找到dsw后缀名的那个,就是工作空间,用vc6打开编译,生成,运行文件到刚才目录下,找到编译好的FileTool.dll文件二加载FileTool第一步工作完成了,接下来就是在Visval Stdio中添加这个dll操作过程1运行vc6,在vc6上工具栏按如下操作:工具->定制->附加项和宏文件->浏览接下来就是选中你刚才看到的FileTool.dll文件(记得文件类型那里选dll)英文版的路径为Tools->Customize->Add-ins And Macro File->Browse如果出现"unable to register this add-ins because its DLLRegisterServer returns an error"的错误,这个原因是由于UAC引起的解决思路:A 以管理员身份重新运行vc6,然后按照上面的继续操作B 用管理员身份打开命令行提示符,cd到刚才存放FileTool.dll的目录下在命令行中打入regsvr32 FileTool.dll 注销这个dll再执行步骤1,出现了这样的一个小小工具栏:2 使用方法O按钮用来替代原来的”打开“按钮,A按钮用来给项目添加文件。
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的静态链接库。
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或者百度。
《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。
iostream.h与<iostream>下面的代码为什么在VC2010下面编译不过去?#include <iostream.h>int main(){cout<<"Hello World."<<endl;return 0;}错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用<iostream>头文件来代替,你甚至可以认为<iostream>是这样定义的:namespace std{#include "iostream.h"}因此我们可以简单的修改我们的Hello World。
#include <iostream>using namespace std;int main(){cout<<"Hello World."<<endl;return 0;}iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了<iostream>。
而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。
但是它们依然有对应的C++版本,如<cstdio> <cstdlib>等。
VC++中常见的编译错误及其解决方第一部分编译错误1.error C2001: newline in constant 编号:C2001 直译:在常量中出现了换行。
错误分析:(1)字符串常量、字符常量中是否有换行。
(2)在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
(3)在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
(4)在这句语句中,某个字符常量的尾部是否漏掉了单引号。
(5)是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
2.error C2015: too many characters in constant 编号:C2015 直译:字符常量中的字符太多了。
错误分析:单引号表示字符型常量。
一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:if (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
两个单引号之间不加任何内容会引发如下错误:error C2137: empty cha racter constant。
3.error C2018: unknown character '0x##'编号:C2018 直译:未知字符…0x##‟。
错误分析:0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
4.error C2041: illegal digit '#' for base '8'编号:C2141 直译:在八进制中出现了非法的数字…#‟(这个数字#通常是8或者9)。
错误分析:如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。
例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。
5.error C2065: 'xxxx' : undeclared identifier 编号:C2065 直译:标识符“xxxx”未定义。
错误分析:首先,解释一下什么是标识符。
标志符是程序中出现的除关键字之外的词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写。
变量名、函数名、类名、常量名等等,都是标志符。
所有的标志符都必须先定义,后使用。
标志符有很多种用途,所以错误也有很多种原因。
(1)如果“xxxx”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼写错误、大小写错误所引起的,所以,首先检查变量名是否正确。
(关联:变量,变量定义)(2)如果“xxxx”是一个函数名,那就怀疑函数名是否没有定义。
可能是拼写错误或大小写错误,当然,也有可能是你所调用的函数根本不存在。
还有一种可能,你写的函数在你调用所在的函数之后,而你有没有在调用之前对函数原形进行申明。
(关联:函数申明与定义,函数原型)(3)如果“xxxx”是一个库函数的函数名,比如“sqrt”、“fabs”,那么看看你在cpp文件已开始是否包含了这些库函数所在的头文件(.h文件)。
例如,使用“sqrt”函数需要头文件math.h。
如果“xxxx”就是“ci n”或“cout”,那么一般是没有包含“iostream.h”。
(关联:#include,cin,cout)(4)如果“xxxx”是一个类名,那么表示这个类没有定义,可能性依然是:根本没有定义这个类,或者拼写错误,或者大小写错误,或者缺少头文件,或者类的使用在申明之前。
(关联:类,类定义)(5)标志符遵循先申明后使用原则。
所以,无论是变量、函数名、类名,都必须先定义,后使用。
如使用在前,申明在后,就会引发这个错误。
(6)C++的作用域也会成为引发这个错误的陷阱。
在花括号之内变量,是不能在这个花括号之外使用的。
类、函数、if、do(while)、for所引起的花括号都遵循这个规则。
(关联:作用域)(7)前面某句语句的错误也可能导致编译器误认为这一句有错。
如果你前面的变量定义语句有错误,编译器在后面的编译中会认为该变量从来没有定义过,以致后面所有使用这个变量的语句都报这个错误。
如果函数申明语句有错误,那么将会引发同样的问题。
6.error C2086: 'xxxx' : redefinition 编号:C2374 直译:“xxxx”重复申明。
错误分析:变量“xxxx”在同一作用域中定义了多次。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
7.error C2374: 'xxxx' : redefinition; multiple initialization 编号:C2374 直译:“xxxx”重复申明,多次初始化。
错误分析:变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
8.C2143: syntax error : missing ';' before (identifier) 'xxxx'编号:C2143 直译:在(标志符)“xxxx”前缺少分号。
错误分析:这是VC6的编译期最常见的误报,当出现这个错误时,往往所指的语句并没有错误,而是它的上一句语句发生了错误。
其实,更合适的做法是编译器报告在上一句语句的尾部缺少分号。
上一句语句的很多种错误都会导致编译器报出这个错误:(1)上一句语句的末尾真的缺少分号。
那么补上就可以了。
(2)上一句语句不完整,或者有明显的语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致)。
(3)如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,而且这个文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。
9.error C2137: empty character constant编号:C2137 直译:空的字符定义。
错误分析:原因是连用了两个单引号,而中间没有任何字符。
一般的,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待)。
两个单引号之间不加任何内容是不允许的。
需要注意的是:如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。
如果单引号中的字符数多于4个,会引发2015错误:error C2015: too many cha racters in constant。
10.error C2374: 'xxxx' : redefinition; multiple initialization 编号:C2374 直译:“xxxx”重复申明,多次初始化。
错误分析:变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
第二部分链接错误1.error LNK2001: unresolved external symbol _main 编号:LNK2001 直译:未解决的外部符号:_main。
错误分析:缺少main函数。
看看main的拼写或大小写是否正确。
2.error LNK2005: _main already defined in xxxx.obj 编号:LNK2005 直译:_main已经存在于xxxx.obj中了。
错误分析:直接的原因是该程序中有多个(不止一个)main函数。
这是初学C++的低年级同学在初次编程时经常犯的错误。
这个错误通常不是你在同一个文件中包含有两个main函数,而是在一个project(项目)中包含了多个cpp文件,而每个cpp文件中都有一个main函数。
引发这个错误的过程一般是这样的:你写完成了一个C++程序的调试,接着你准备写第二个C++文件,于是你可能通过右上角的关闭按钮关闭了当前的cpp文件字窗口(或者没有关闭,这一操作不影响最后的结果),然后通过菜单或工具栏创建了一个新的cpp文件,在这个新窗口中,程序编写完成,编译,然后就发生了以上的错误。
原因是这样的:你在创建第二个cpp文件时,没有关闭原来的项目,所以你无意中新的cpp文件加入你上一个程序所在的项目。
切换到“File View”视图,展开“Source Files”节点,你就会发现有两个文件。
在编写C++程序时,一定要理解什么是 Workspace、什么是Project。
每一个程序都是一个Project(项目),一个Project可以编译为一个应用程序(*.exe),或者一个动态链接库(*.dll)。
通常,每个Project下面可以包含多个.cpp文件,.h文件,以及其他资源文件。
在这些文件中,只能有一个main 函数。
初学者在写简单程序时,一个Project中往往只会有一个cpp文件。
Workspace(工作区)是Project的集合。
在调试复杂的程序时,一个Workspace可能包含多个Project,但对于初学者的简单的程序,一个Workspace往往只包含一个Project。
当完成一个程序以后,写另一个程序之前,一定要在“File”菜单中选择“Cl ose Workspace”项,已完全关闭前一个项目,才能进行下一个项目。
避免这个错误的另一个方法是每次写完一个C++程序,都把VC6彻底关掉,然后重写打开VC6,写下一个程序。