VC6常见编译错误

合集下载

VC6.0编译错误解决方法集锦

VC6.0编译错误解决方法集锦

VC6.0编译错误解决方法集锦windows编程2010-05-08 21:14:39 阅读83 评论0 字号:大中小订阅VC6.0编译错误解决方法集锦最近打算学习一下网络编程,而大部分socket编程环境都是Unix的,很是不便,在windows中总是不能编译,特寻得一篇文章解决此痒。

爽哉、爽哉!linking... server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol server.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbolserver.obj : error lnk2001: unresolved external symbol原因和解决办法:找不到相应函数,问题是Link选项里没有加入相应的lib库,winsock要连接wsock32.lib。

第三章 VC++ 6.0常见编译错误

第三章  VC++ 6.0常见编译错误

第三章 VC++ 6.0常见编译错误[错误类型1]error C2143: syntax error : missing ';' before identifier 'scanf'语法错误:在'scanf'之前缺少“;”出错实例: int nscanf(“%d”, &n);[错误类型2]error C2065: 'A' : undeclared identifier标识符A未声明出错实例:int a;scanf(“%d”, &A);[错误类型3]error C2065: 'sqrt' : undeclared identifier标识符sqrt未定义(原因:未包含<math.h>)[错误类型4]error C2296: '%' : illegal, left operand has type 'float'error C2297: '%' :illegal, right operand has type 'float'非法, '%'运算符的左右操作数不是整型出错实例:float a = 10, b = 2;printf(“%d\n”, a % b);[错误类型5]error C2440: '=' : cannot convert from 'char [2]' to 'char'不能将字符串转换成字符出错实例:char ch;ch = “a”;[错误类型6]error C2181: illegal else without matching ifelse子句没有匹配的if[错误类型7]error C2196: case value '1' already usedcase 1: 已经被使用(原因:有相同的case 常量)[错误类型8]error C2078: too many initializers初始化值太多出错实例:int a[5] = {1, 2, 3, 4, 5, 6};[错误类型9]error C2105: '++' needs l-value++运算只能作用于左值(常量不能作左值)出错实例:int a[]= {1, 2, 3, 4, 5};int *pa = ++a; // 数组名是地址常量,不能作左值[错误类型10]error C2117: 'Hello' : array bounds overflow数组边界溢出出错实例:char str[5] = "Hello";[错误类型11]error C4716: 'Function' : must return a value函数Function()必须返回一个值出错实例:int Function(int n) // 函数定义,返回值类型:int 类型 {…………return; // 不返回值,语法错误,应为:return 表达式;}[错误类型12]error C2562: 'Function' : 'void' function returning a value无返回值的函数Function()返回了一个值出错实例:void Function(int n) // 函数定义,无返回值{…………return (n % 10); // 有返回值,语法错误,应为:return;}[错误类型13]error C2447: missing function header (old-style formal list?)缺少函数头出错实例:void Function(int n); // 都是“;”惹的祸{………return;}[错误类型14]error C2082: redefinition of formal parameter 'n'重定义了参数n出错实例:void Function(int n){int m, n; // 局部变量n与参数n同名return;}[错误类型15]error C2601: 'Function' : local function definitions are illegal 函数Function()定义是非法的(原因:出现嵌套定义)[错误类型16]error C2065: 'Function' : undeclared identifier函数Function()未声明(原因:先使用后声明或定义)。

VC6快捷键和常见错误

VC6快捷键和常见错误

VC++6.0快捷键1、检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。

如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。

2、查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。

3、格式化一段乱七八糟的源代码选中那段源代码,按A TL+F8。

4、在编辑状态下发现成员变量或函数不能显示删除该项目扩展名为.ncb文件,重新打开该项目。

5、如何整理ClassView视图中大量的类可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.6、定位预处理指定在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.7、如何添加系统中Lib到当前项目在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib之间用空格格开.8、如何添加系统中的头文件(.h)到当前项目.#include ,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找.9、如何在Studio使用汇编调试在WorkBench的Debugger状态下按CTRL+F7.10、怎样处理ClassZiard找不到的系统消息如果要在ClassWizard中处理WM_NCHITTEST等系统消息,请在ClassWizard中Class Info页中将Message filter改为Window就有了.11、如何干净的删除一个类先从Workspace中的FileView中删除对应的.h和.cpp文件,再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件与.clw文件。

VC6.0常见错误信息分析

VC6.0常见错误信息分析

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):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。

VisualBasic 6.0常见错误及解决方案

VisualBasic 6.0常见错误及解决方案

解决方案 ⑴ 关闭不需要的应用程序、文档或资源文件。 ⑵ 将庞大的模块或过程分成几个。 虽然这样不能节省内存空间, 但可避免 64K 段边界 限制。 ⑶ 按增强方式重新启动 Microsoft Windows 。 ⑷ 空出一些磁盘空间以增加虚拟内存,或至少确保有空馀的空间。 ⑸ 减少一些驻留程序。 ⑹ 减少一些不需要的设备驱动程序。 ⑺ 减少 Public 变量的数量。 4. 下标越界(错误 9) 错误原因 只能在定义的范围内访问数组元素和集合成员。
错误分析 ⑴ 引用了不存在的数组元素。 ⑵ 声明数组时没有指定元素的数目。例如,下列的代码就会导致此错误:
2
Dim MyArray() As Integer MyArray(8) = 234 ' 导致错误 9。 ⑶ 引用了不存在的集合成员。 ⑷ 使用速写形式的下标,结果指定了错误的元素。 解决方案 ⑴ 下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查 数组的声明以确认其上界和下界。 若使用的是重新指定范围的数组, 应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。 ⑵ Visual Basic 并不会将没有指定范围的数组自动设为 0 – 10。相反必须使用 Dim 或 ReDim 来指定数组中元素的数目。 ⑶ 试着使用 For Each...Next 结构代替指定元素下标。 ⑷ 例如, 当在集合上使用 ! 运算子时, ! 自动指定了一个键。 例如 object!keyname.value 和 object.item(keyname).value 是一样的。在此例中,集合中如果 keyname 表示一 个错误键,错误就会产生。若要改进此错误,在集合对象中使用正确的键名称或索 引。 5. 数组长度固定或临时被锁定(错误 10) 错误原因 并非所有数组都可重设大小。即使数组声明成动态,或者数组是在 Variant 变量中, 也会被临时锁定。 错误分析 ⑴ 使用 ReDim 来改变固定大小数组的元素数。 例如, 在下列的代码中, 在 NextOne 过 程中 SomeArr 接收了固定大小的数组 FixedArr , 然后试图调整 SomeArr 的大小: Sub FirstOne Dim FixedArr(25) As Integer NextOne FixedArr() End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) ... End Sub ⑵ 对模块层次动态数组,要重新确定大小,而某一个元素已经作为参数传给了过程。 例如,在下列的代码中,ModArray 是模块层次动态数组,却将其第 56 个元素以按 引用传给 Test 过程:

VC6_VC6.0编译常见错误第一部分语法错

VC6_VC6.0编译常见错误第一部分语法错

VC6.0编译常见错误第一部分语法错误1、变量没有区分大小写例如:变量X 与x 不同;2、关键字写错例如:void 写成了viod等,cout写成count等3、把英文符号写成了中文符号例如:常见的错误包括单引号、双引号、分号等4、混肴了“=”与“==”的区别5、复合语句没有使用{ }6、把“x>5 && x<9”写成“5<x<9”第二部分编译错误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 character constant。

3.error C2018: unknown character '0x##'编号:C2018直译:未知字符‘0x##’。

vc++6.0菜单中英文对照附录常见编译错误

vc++6.0菜单中英文对照附录常见编译错误

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所示。

VC6编译及链接过程中常见的出错提示

VC6编译及链接过程中常见的出错提示

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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录VC6.0编译常见错误 (1)第一部分编译错误 (1)1.error C2001: newline in constant (1)2.error C2015: too many characters in constant (2)3.error C2018: unknown character '0x##' (3)4.error C2041: illegal digit '#' for base '8' (3)5.error C2065: 'xxxx' : undeclared identifier (3)6.error C2086: 'xxxx' : redefinition (5)7.error C2374: 'xxxx' : redefinition; multiple initialization (5)8.C2143: syntax error : missing ';' before (identifier) 'xxxx' (5)9.error C2137: empty character constant (6)10.error C2374: 'xxxx' : redefinition; multiple initialization (7)第二部分链接错误 (7)1.error LNK2001: unresolved external symbol _main (7)2.error LNK2005: _main already defined in xxxx.obj (7)VC6.0编译常见错误第一部分编译错误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 c haracter 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”就是“cin”或“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: to o many characters 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。

相关文档
最新文档