VC6.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.0编译常见错误

第一部分编译错误. : 编号:直译:在常量中出现了换行. 错误分析:()字符串常量、字符常量中是否有换行.()在这句语句中,某个字符串常量地尾部是否漏掉了双引号.()在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”.()在这句语句中,某个字符常量地尾部是否漏掉了单引号. 文档收集自网络,仅用于个人学习()是否在某句语句地尾部,或语句地中间误输入了一个单引号或双引号.. : 编号:文档收集自网络,仅用于个人学习直译:字符常量中地字符太多了. 错误分析:单引号表示字符型常量.一般地,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示地字符当作一个字符看待),如果单引号中地字符数多于个,就会引发这个错误. 文档收集自网络,仅用于个人学习另外,如果语句中某个字符常量缺少右边地单引号,也会引发这个错误,例如: ( ' '') { … } 文档收集自网络,仅用于个人学习值得注意地是,如果单引号中地字符数是个,编译不报错,输出结果是这几个字母地码作为一个整数(,)整体看待地数字. 文档收集自网络,仅用于个人学习两个单引号之间不加任何内容会引发如下错误: : . 文档收集自网络,仅用于个人学习. : '' 编号:直译:未知字符…‟.错误分析:是字符码地进制表示法.这里说地未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字.如果全角字符和汉字用双引号包含起来,则成为字符串常量地一部分,是不会引发这个错误地. 文档收集自网络,仅用于个人学习. : '' '' 编号:文档收集自网络,仅用于个人学习直译:在八进制中出现了非法地数字…‟(这个数字通常是或者). 错误分析:如果某个数字常量以“”开头(单纯地数字除外),那么编译器会认为这是一个进制数字.例如:“”、“”、“”都是非法地,而“”是合法地,等同于是进制中地“”.文档收集自网络,仅用于个人学习. : '' : 编号:文档收集自网络,仅用于个人学习直译:标识符“”未定义. 错误分析:首先,解释一下什么是标识符.标志符是程序中出现地除关键字之外地词,通常由字母、数字和下划线组成,不能以数字开头,不能与关键字重复,并且区分大小写.变量名、函数名、类名、常量名等等,都是标志符.所有地标志符都必须先定义,后使用.标志符有很多种用途,所以错误也有很多种原因. 文档收集自网络,仅用于个人学习()如果“”是一个变量名,那么通常是程序员忘记了定义这个变量,或者拼写错误、大小写错误所引起地,所以,首先检查变量名是否正确.(关联:变量,变量定义)文档收集自网络,仅用于个人学习()如果“”是一个函数名,那就怀疑函数名是否没有定义.可能是拼写错误或大小写错误,当然,也有可能是你所调用地函数根本不存在.还有一种可能,你写地函数在你调用所在地函数之后,而你有没有在调用之前对函数原形进行申明.(关联:函数申明与定义,函数原型)文档收集自网络,仅用于个人学习()如果“”是一个库函数地函数名,比如“”、“”,那么看看你在文件已开始是否包含了这些库函数所在地头文件(文件). 例如,使用“”函数需要头文件.如果“”就是“”或“”,那么一般是没有包含“”.(关联:,,)文档收集自网络,仅用于个人学习()如果“”是一个类名,那么表示这个类没有定义,可能性依然是:根本没有定义这个类,或者拼写错误,或者大小写错误,或者缺少头文件,或者类地使用在申明之前.(关联:类,类定义)文档收集自网络,仅用于个人学习()标志符遵循先申明后使用原则.所以,无论是变量、函数名、类名,都必须先定义,后使用.如使用在前,申明在后,就会引发这个错误. 文档收集自网络,仅用于个人学习()地作用域也会成为引发这个错误地陷阱.在花括号之内变量,是不能在这个花括号之外使用地.类、函数、、()、所引起地花括号都遵循这个规则.(关联:作用域)文档收集自网络,仅用于个人学习()前面某句语句地错误也可能导致编译器误认为这一句有错.如果你前面地变量定义语句有错误,编译器在后面地编译中会认为该变量从来没有定义过,以致后面所有使用这个变量地语句都报这个错误.如果函数申明语句有错误,那么将会引发同样地问题. 文档收集自网络,仅用于个人学习. : '' : 编号:直译:“”重复申明. 错误分析:变量“”在同一作用域中定义了多次.检查“”地每一次定义,只保留一个,或者更改变量名. . : '' : ; 编号:文档收集自网络,仅用于个人学习直译:“”重复申明,多次初始化. 错误分析:变量“”在同一作用域中定义了多次,并且进行了多次初始化.检查“”地每一次定义,只保留一个,或者更改变量名. 文档收集自网络,仅用于个人学习. : : ';' () '' 编号:文档收集自网络,仅用于个人学习直译:在(标志符)“”前缺少分号. 错误分析:这是地编译期最常见地误报,当出现这个错误时,往往所指地语句并没有错误,而是它地上一句语句发生了错误.其实,更合适地做法是编译器报告在上一句语句地尾部缺少分号.上一句语句地很多种错误都会导致编译器报出这个错误:()上一句语句地末尾真地缺少分号.那么补上就可以了. 文档收集自网络,仅用于个人学习()上一句语句不完整,或者有明显地语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致). 文档收集自网络,仅用于个人学习()如果发现发生错误地语句是文件地第一行语句,在本文件中检查没有错误,而且这个文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件地尾部可能有错误. 文档收集自网络,仅用于个人学习. : 编号:直译:空地字符定义. 错误分析:原因是连用了两个单引号,而中间没有任何字符.一般地,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示地字符当作一个字符看待).两个单引号之间不加任何内容是不允许地. 文档收集自网络,仅用于个人学习需要注意地是:如果单引号中地字符数是个,编译不报错,输出结果是这几个字母地码作为一个整数(,)整体看待地数字. 文档收集自网络,仅用于个人学习如果单引号中地字符数多于个,会引发错误: : . 文档收集自网络,仅用于个人学习. : '' : ; 编号:文档收集自网络,仅用于个人学习直译:“”重复申明,多次初始化. 错误分析:变量“”在同一作用域中定义了多次,并且进行了多次初始化.检查“”地每一次定义,只保留一个,或者更改变量名. 文档收集自网络,仅用于个人学习第二部分链接错误. : 编号:文档收集自网络,仅用于个人学习直译:未解决地外部符号:.错误分析:缺少函数.看看地拼写或大小写是否正确.. : 编号:文档收集自网络,仅用于个人学习直译:已经存在于中了. 错误分析:直接地原因是该程序中有多个(不止一个)函数.这是初学地低年级同学在初次编程时经常犯地错误.这个错误通常不是你在同一个文件中包含有两个函数,而是在一个(项目)中包含了多个文件,而每个文件中都有一个函数.引发这个错误地过程一般是这样地:你写完成了一个程序地调试,接着你准备写第二个文件,于是你可能通过右上角地关闭按钮关闭了当前地文件字窗口(或者没有关闭,这一操作不影响最后地结果),然后通过菜单或工具栏创建了一个新地文件,在这个新窗口中,程序编写完成,编译,然后就发生了以上地错误.原因是这样地:你在创建第二个文件时,没有关闭原来地项目,所以你无意中新地文件加入你上一个程序所在地项目.切换到“”视图,展开“”节点,你就会发现有两个文件. 文档收集自网络,仅用于个人学习在编写程序时,一定要理解什么是、什么是.每一个程序都是一个(项目),一个可以编译为一个应用程序(*),或者一个动态链接库(*).通常,每个下面可以包含多个文件,文件,以及其他资源文件.在这些文件中,只能有一个函数.初学者在写简单程序时,一个中往往只会有一个文件.(工作区)是地集合.在调试复杂地程序时,一个可能包含多个,但对于初学者地简单地程序,一个往往只包含一个. 文档收集自网络,仅用于个人学习当完成一个程序以后,写另一个程序之前,一定要在“”菜单中选择“”项,已完全关闭前一个项目,才能进行下一个项目.避免这个错误地另一个方法是每次写完一个程序,都把彻底关掉,然后重写打开,写下一个程序. 文档收集自网络,仅用于个人学习。
VC6.0常见断言错误总结

AFXAPI AfxMessageBox()
APPUI1.CPP中的第143行
这里的问题可能是由两种原因引起的:
1.字符串资源不存在
2.没有正确地引用资源(比如说错误地号码,等等)
ASSERT(m_hDC != NULL)
CDC::SelectObject()
对于每种类型地对象(pen,brush等)都有类似地断言。
DLGDATA.CPP文件的第308和325
如果这个调用针对的对象不是一个组中的第一个单选按钮,或者对组中任何一个按钮调用了不止一次,就会引起这个断言。只是第一个按钮可以有WS_GROUP窗口风格。用Class Wnzard时,如何想要把组中的第一个按钮外的其他按钮与一个成员变量关联,唯一的方法时先给这个按钮设置WS_GROUP风格,然后关联变量,最后再去掉WS_GROUP风格。如果忘记去掉WS_GROUP,就会出现断言。
WINCORE.CPP文件中的第747行
起因是由于使用Create()函数时试图赋予WS_POPUP风格没,但是不支持的,想要这种风格应该用CreateEx()函数
ASSERT(pMap != NULL)
CWnd::DestroyWindow()
WINCORE.CPP文件中的第969行
起因是在消息映射还没有激活的时候就关闭或是析构窗口
ASSERT(!pDX->m_bSaveAndValidate)
AFXAPI DDX_Control()
DLGDATA.CPP文件的第624行
调用UpdateData()或是UpdateData(TRUE)之前至少要调用一次UpdateData(FALSE),否则就会出现这个断言
ASSERT(FALSE)
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):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。
VC错误代码

VC++6.0常见编译错误中英文对照表fatal error C1003: error count exceeds number; stopping compilation中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译fatal error C1004: unexpected end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等fatal error C1083: Cannot open include file: 'xxx': No such file or directory 中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读fatal error C1903: unable to recover from previous error(s); stopping compilation 中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误error C2001: newline in constant中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写error C2006: #include expected a filename, found 'identifier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”error C2007: #define syntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”error C2008: 'xxx' : unexpected in macro definition中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”error C2009: reuse of macro formal 'identifier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复error C2010: 'character' : unexpected in macro formal parameter list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’error C2014: preprocessor command must start as first nonwhite space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符error C2015: too many characters in constant中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”error C2017: illegal escape sequence中文对照:(编译错误)转义字符非法分析:一般是转义字符位于 ' ' 或 " " 之外,例如“char error = ' '\n;”error C2018: unknown character '0xhh'中文对照:(编译错误)未知的字符0xhh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号error C2019: expected preprocessor directive, found 'character'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”error C2021: expected exponent value, not 'character'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456Eerror C2039: 'identifier1' : is not a member of 'identifier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个default,删去多余的defaulterror C2050: switch expression not integral中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch ("a")”中表达式为字符串,这是非法的error C2051: case expression not constant中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的error C2052: 'type' : illegal type for case expression中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)error C2057: expected constant expression中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的error C2058: constant expression is not integral中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量error C2059: syntax error : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxxerror C2064: term does not evaluate to a function中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数error C2065: 'xxx' : undeclared identifier中文对照:(编译错误)未定义的标识符xxx分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。
VC++6.0裏面20种C语言常见错误代码解释

11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
解决方法:
其一,包含正确路径的#include "stdafx.h";
其二,在*.cpp文件的Setting里面设置,C++选项中的分类 precompiled header,选择不包含头文件即可。
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
Visual_c++6.0常见错误提示汇总

Visual C++6.0 编译错误提示汇总1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
(一般是没有#include "stdafx.h")2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。
4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。
(一般是汉字或中文标点符号)5、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)6、error C2065: 'IDD_MYDIALOG' : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。
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编译及链接过程中常见的出错提示

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经常会提示程序有错(语法和拼写问题,肯定不会指明算法有问题,否则就不用编程了)。
附录III Visual C++ 6.0编译C 语言程序常见错误信息[共5页]
![附录III Visual C++ 6.0编译C 语言程序常见错误信息[共5页]](https://img.taocdn.com/s3/m/df6b7bb11ed9ad51f11df230.png)
277 附录III Visual C++ 6.0编译C 语言程序常见错误信息程序代码编写完成后,在程序的编译、链接和运行过程中,会出现各种错误信息,在VC++的帮助文档中,有关于各种错误的详细说明,为了便于查阅,下面列出初学者在学习和使用C 语言时出现的一些常见的编译错误信息,并指出可能的错误原因。
VC++6.0编译出错时会指示出程序错误的位置,鼠标双击出错信息行,就可以实现错误的定位。
编译错误信息一般以C 开头(如C2001等),链接阶段的错误信息以LNK 开头。
一、编译错误1.fatal error C1003:error count exceeds number; stopping compilation错误计数超过number 正在停止编译。
程序中的错误太多,无法恢复,编译器必须终止,需要修改错误,并再次编译。
2.fatal error C1004:unexpected end of file found遇到意外的文件结束,一个函数或者一个结构定义缺少“}”,或者在一个函数调用或表达式中括号没有配对出现,或者注释符“/*…*/”不完整等。
3.fatal error C1083:Cannot open include file: 'xxx': No such file or directory无法打开头文件xxx :。
没有这个文件或路径、头文件不存在、头文件拼写错误或者文件为只读。
4.error C2001:newline in constant在常量中出现了换行,字符串常量不能在多行书写。
5.error C2006:#include expected a filename, found 'identifier'#include 命令中需要文件名,一般是头文件未用一对双引号或尖括号括起来,如“#include stdio.h ”。
6.error C2007:#define syntax#define 语法错误,如“#define ”后缺少宏名。
在VC++6.0中编译出错时解决方法汇总

在VC++6.0中编译出错时解决方法汇总【1】missing function header (old-style formal list?)#SinaEditor_Temp_FontName 解决方法该函数的函数头后边加了分号去掉即可例如:void fun();{}就会出现那种情况【2】在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive的错误.解决方法:1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。
确定。
2、在文件开头添加:#include "stdafx.h"对预编译头文件说明如下:所谓头文件预编译,就是把一个工程(Project)中使用的一些MFC标准头文件(如Windows.H、Afxwin.H)预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果。
这样可以加快编译速度,节省时间。
预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。
编译器通过一个头文件stdafx.h来使用预编译头文件。
stdafx.h这个头文件名是可以在project的编译设置里指定的。
编译器认为,所有在指令#include "stdafx.h"前的代码都是预编译的,它跳过#include "stdafx. h"指令,使用projectname.pch编译这条指令之后的所有代码。
Visual_C++_6.0常见语法错误信息

Visual_C++_6.0常见语法错误信息第一篇:Visual_C++_6.0常见语法错误信息Visual C++ 6.0常见的语法错误信息1、error C2018: unknown character '0xa1'不认识的字符'0xa1'。
(一般是汉字或中文标点符号)2、error C2065: 'I……' : undeclared identifier“I……”:未声明过的标识符。
3、error C2146: syntax error : missing ';'语法错误:丢了“;”。
4、error C2146: syntax error : missing ')'语法错误:丢了“)”。
5、fatal error C1004: unexpected end of file found 语法错误:丢了“}”。
6、error C2057: expected constant expression希望是常量表达式。
(一般出现在switch语句的case分支中)7、error C2196: case value 'xx' already used值xx已经用过。
(一般出现在switch语句的case分支中)8、error C2181: illegal else without matching if语法错误:if 缺少判断表达式。
第二篇:常见错误信息Keil C 编译器常见警告与错误信息的解决方法1)如果两个或更多c文件都需要使用某非bit型变量,那么声明是应将相应存储类型同时注明,即如果定义“uchar idata cntembuf;”,那么应声明为“extern uchar idata cntembuf;”或者“extern idata cntembuf;”;2)如果是bit型变量,则数据类型“bit”必须注明,而存储类型可以省略;LN认为,keil里之所以将bit变量和其他类型变量分开处理,是keil 面向的处理器都是51内核的,而51内核bit变量只存在于特殊功能寄存器和内存的位寻址区(bdata区),而特殊功能寄存器中的位变量若在两个以上文件中使用各各文件都只能用类似于sbit abcd = P1^6;的形式进行声明,并且keil不检测abcd这个位变量在不同文件中是否代替相同位(例如,可以在另一个c文件中声明为:sbit abcd = P0^5;等),这样一来,用extern声明的bit变量就只有在bdata区了,所以,允许在在一个c文件中定义位变量后,在其它c文件中省略“bdata”这个存储类型;而非bit型变量则可以在特殊功能寄存器,内存,外存,所以声明时要使存储类型与定义时的存储类型相同(也可以在定义和声明时都不规定存储类型,而又编译器根据编译模式自动分配)。
在64位系统上安装VC6.0常见错误的解决方法

在64位系统上安装VC6.0常见错误的解决方法
因为VC6.0支持WIN32系统,所以要安装到64位计算机时会有兼容性错误,解决问题的方法如下:
第一种:无法打开afxres.h文件,一般都是配置的路径问题。
点开工具—选项命令,在选项对话框中选择目录选项卡。
然后重新配置路径,要使显示的路径与安装程序的路径一致。
第二种情况,显示无MS….dll文件等。
只需要将该文件复制到C:\\Windows\\SysWOW64中就可以了。
差几个就复制几个,先一个一个的复制,然后观察。
第三种:针对win8环境。
首先安装好后,打开路径,将MSDEV 修改成MSDEV1或其他,然后点击右键,选择“属性”。
在属性对话框选中兼容性选项卡,在更改所有用户中,设置兼容模式为“windows 7”,以“管理员身份运行”。
确定,运行MSDEV1即可。
VC++6.0常见编译错误中英文对照表

VC++6.0常见编译错误中英文对照表fatal error C1003: error count exceeds number; stopping compilation中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译fatal error C1004: unexpected end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等fatal error C1083: Cannot open include file: 'xxx': No such file or directory 中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读fatal error C1903: unable to recover from previous error(s); stopping compilation 中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误error C2001: newline in constant中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写error C2006: #include expected a filename, found 'identifier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”error C2007: #define syntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”error C2008: 'xxx' : unexpected in macro definition中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”error C2009: reuse of macro formal 'identifier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复error C2010: 'character' : unexpected in macro formal parameter list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’error C2014: preprocessor command must start as first nonwhite space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符error C2015: too many characters in constant中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”error C2017: illegal escape sequence中文对照:(编译错误)转义字符非法分析:一般是转义字符位于 ' ' 或 " " 之外,例如“char error = ' '\n;”error C2018: unknown character '0xhh'中文对照:(编译错误)未知的字符0xhh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号error C2019: expected preprocessor directive, found 'character'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”error C2021: expected exponent value, not 'character'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456Eerror C2039: 'identifier1' : is not a member of 'identifier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个default,删去多余的defaulterror C2050: switch expression not integral中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch ("a")”中表达式为字符串,这是非法的error C2051: case expression not constant中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的error C2052: 'type' : illegal type for case expression中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)error C2057: expected constant expression中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的error C2058: constant expression is not integral中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量error C2059: syntax error : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxxerror C2064: term does not evaluate to a function中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数error C2065: 'xxx' : undeclared identifier中文对照:(编译错误)未定义的标识符xxx分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。
Visual c++6.0常见错误提示汇总

2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory 不能打开包含文件“R…….h”:没有这样的文件或目录。 3、error C2011: 'C……': 'class' type redefinition 类“C……”重定义。 4、error C2018: unknown character '0xa3' 不认识的字符'0xa3'。(一般是汉字或中文标点符号) 5、error C2057: expected constant expression 希望是常量表达式。(一般出现在 switch 语句的 case 分支中) 6、error C2065: 'IDD_MYDIALOG' : undeclared identifier “IDD_MYDIALOG”:未声明过的标识符。 7、error C2082: redefinition of formal parameter 'bReset' 函数参数“bReset”在函数体中重定义。 8、error C2143: syntax error: missing ':' before '{' 句法错误:“{”前缺少“;”。 9、error C2146: syntax error : missing ';' before identifier 'dc' 句法错误:在“dc”前丢了“;”。
Visual C++6.0 编译错误提示汇总
1、 fatal error C1010: unexpected end of file while looking for precompiled header directive。 寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
vc6.0常见错误及分析

vc6.0常见错误及分析1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。
提示: 一般是在文件最前面没有#include “stdafx.h”2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory不能打开包含文件“R…….h”:没有这样的文件或目录。
提示;这个头文件名字是否正确?在不在相应的目录下面?3、error C2011: 'C……': 'class' type redefinition类“C……”重定义。
提示:这个变量名或者函数定义了两次以上。
4、error C2018: unknown character '0xa3'不认识的字符'0xa3'。
提示:使用了汉字或者中文标点符号5、error C2057: expected constant expression希望是常量表达式。
提示:一般出现在switch 语句的case 分支中,用了变量作为case 条件。
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier“IDD_MYDIALOG”:未声明过的标识符。
提示:变量名或者函数没有定义,检查是否定义过了,或者所定义的变量名和函数名在用的时候是否输入错误。
7、error C2082: redefinition of formal parameter 'bReset'函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'句法错误:“{”前缺少“;”。
VC 6.0编译器错误整理

VC 6.0编译器错误整理收藏编程时经常遇到一些编译错误,这些都是我遇到过的,去百度、Google找了半天找到的,现在整理一下,方便以后查找。
统一格式:ID.【错误提示】:编译器提示的错误信息【说明】:产生此错误的根本原因【解决方法】:解决此错误的具体方法1. 【错误提示】: libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main【说明】: Windows项目要使用Windows子系统, 而不是Console 【解决方法】:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows2. 【错误提示】:LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16【说明】:控制台项目要使用Console子系统, 而不是Windows【解决方法】:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console3. 【错误提示】:msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16【说明】:通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口【解决方法】:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup, 即可4. 【错误提示】:nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex【说明】:这是因为MFC要使用多线程时库【解决方法】:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在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版本: 调试阶段使用5. 【错误提示】:Compiling... ,Error spawning cl.exe【说明】:这个问题很多情况下是由于路径设置的问题引起的,“CL.exe”是VC使用真正的编译器(编译程序),其路径在“VC根目录\VC98\Bin”下面,你可以到相应的路径下找到这个应用程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常见编译错误提示
(1)error C2001: newline in constant
1编号:C2001
直译:在常量中出现了换行。
错误分析:①字符串常量、字符常量中是否有换行。
2②在这句语句中,某个字符串常量的尾部是否漏掉了双引号。
3③在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。
4④在这句语句中,某个字符常量的尾部是否漏掉了单引号。
5⑤是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。
(2)error C2015: too many characters in constant
编号:C2015
直译:字符常量中的字符太多了。
错误分析:
单引号表示字符型常量。
一般的,单引号中必须有且只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。
另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:
if (x == 'x || x == 'y') { … }
值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC 码作为一个整数(int,4B)整体看待的数字。
(3)error C2137: empty character constant
编号:C2137
直译:空的字符定义。
错误分析:
原因是连用了两个单引号,而中间没有任何字符,这是不允许的。
(4)error C2018: unknown character '0x##'
编号:C2018
直译:未知字符…0x##‟。
错误分析:
0x##是字符ASC码的16进制表示法。
这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。
如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。
(5)error C2041: illegal digit '#' for base '8'
编号:C2141
直译:在八进制中出现了非法的数字…#‟(这个数字#通常是8或者9)。
错误分析:
如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。
例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。
(6)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标志符遵循先申明后使用原则。
所以,无论是变量、函数名、类名,都必须先定义,后使用。
如使用在前,申明在后,就会引发这个错误。
6C++的作用域也会成为引发这个错误的陷阱。
在花括号之内变量,是不能在这个花括号之外使用的。
类、函数、if、do(while)、for所引起的花括号都遵循这个规则。
(关联:作用域)
7前面某句语句的错误也可能导致编译器误认为这一句有错。
如果你前面的变量定义语句有错误,编译器在后面的编译中会认为该变量从来没有定义过,以致后面所有使用这个变量的语句都报这个错误。
如果函数申明语句有错误,那么将会引发同样的问题。
(7)error C2086: 'xxxx' : redefinition
编号:C2374
直译:“xxxx”重复申明。
错误分析:
变量“xxxx”在同一作用域中定义了多次。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
(8)error C2374: 'xxxx' : redefinition; multiple initialization
编号:C2374
直译:“xxxx”重复申明,多次初始化。
错误分析:
变量“xxxx”在同一作用域中定义了多次,并且进行了多次初始化。
检查“xxxx”的每一次定义,只保留一个,或者更改变量名。
(9)C2143: syntax error : missing ';' before (identifier) 'xxxx'
编号:C2143
直译:在(标志符)“xxxx”前缺少分号。
错误分析:
这是VC6的编译期最常见的误报,当出现这个错误时,往往所指的语句并没有错误,而是它的上一句语句发生了错误。
其实,更合适的做法是编译器报告在上一句语句的尾部缺少分号。
上一句语句的很多种错误都会导致编译器报出这个错误:
1上一句语句的末尾真的缺少分号。
那么补上就可以了。
2上一句语句不完整,或者有明显的语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致)。
3如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,但其使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。
(10)error C4716: 'xxx' : must return a value
编号:C4716
直译:“xxx”必须返回一个值。
错误分析:
函数声明了有返回值(不为void),但函数实现中忘记了return 返回值。
要么函数确实没有返回值,则修改其返回值类型为void,要么在函数结束前返回合适的值。
(11) warning C4508: 'main' : function should return a value; 'void' return type assumed
编号:C4508
直译:main函数应该返回一个值;void返回值类型被假定。
错误分析:
4函数应该有返回值,声明函数时应指明返回值的类型,确实无返回值的,应将函数返回值声明为void。
若未声明函数返回值的类型,则系统默认为整型int。
此处的错误估计是在main函数中没有return返回值语句,而main函数要么没有声明其返回值的类型,要么声明了。
5warning类型的错误为警告性质的错误,其意思是并不一定有错,程序仍可以被成功编译、链接,但可能有问题、有风险。
(12)warning C4700: local variable 'xxx' used without having been initialized
编号:C4700
直译:警告局部变量“xxx”在使用前没有被初始化。
错误分析:
这是初学者常见的错误,例如以下程序段就会造成这样的警告,而且程序的确有问题,应加以修改,尽管编译、链接可以成功——若不修改,x的值到底是多少无法确定,是随机的,判断其是否与3相同没有意义,在运气不好的情况下,可能在调试程序的机器上运行时,结果看起来是对的,但更换计算机后再运行,结果就不对,初学者往往感到迷惑。
int x;
if (x==3) printf("hello");。