编译错误类型以及其原因还有中文翻译
作为一名C++的学习者(任何语言都是一样的),学会读编译器发出的错误信息都是一件很重要的事情。在前辈们不断地犯错的过程中,渐渐都会形成自己的错误调试体系。这里将绝大多数正常人能碰到的错误归纳总结。
1.fatal error C1003: error count exceeds number; stopping compilatin
fatal的意思是致命的,重大的的意思,这句话翻译过来是:错误实在是太多了,停止编译。能写出这种程序的人也不一般。
2.fatal error C1004: unexpected end of file found
这句话的意思是没料想到文件结束了,没找见文件结尾。出现这种错误一般是因为函数少加了}或者是类或struct的定义后面忘记加;了,也有可能是代码注释的时候只有前面有/后面就忘记写/了。对于括号不配对这种情况要注意,一般都是没有良好的编程书写风格的人容易犯,尤其是在多重嵌套的时候。
3.fatal error C1083: Cannot open include file: ‘xxx’: No such file or directory
这句话的意思是不能打开xxx这个头文件,没有这样的文件或者是文件目录。 directory的意思就是文件的路径/计算机文件的目录。出现这种情况可能是:头文件不存在,头文件拼写错误或者是头文件为只读。千万千万注意,很多人都是因为头文件拼写错误出现了这个错误提示。
4.error C2001: newline in constant
这句话的翻译是:常量中有换行符。原因一般是在常量字符串中加了换行,使其多行书写。我认为这不是人能犯的错误。
5.error C2006: #include expected a filename, found ‘identifier’
identifier是识别符的意思,这句话的意思是期待一个文件名。
错误原因是忘记加双引号或者是尖括号或者双引号加的位置不对。
6.error C2007: #define syntax
这里syntax是语法的意思,invalid是无效的 的意思,这两个词经常用到,这句话的意思是:用define时语法错误。
7.error C2015: too many characters in constant
常量中字符太多了。好吧,这一般是因为‘’单引号中只能有一个字符,写多个字符就会报这个错误。
8.error C2017: illegal escape sequence
这里英文字母不太好理解,escape是逃跑的意思,但这里
escape sequence的意思是 转义字符。 这句话的意思是:转义字符非法。错误原因一般是因为转义字符跑到了单引号或者双引号的外面。
9.error C2018: unknown character ‘0xhh’
这个错误很常见啊,oxhh这种东西一般都是中文的字符。这句话说明一不小心敲入了中文字符。
10.error C2039: ‘identifier1’ : is not a member of ‘identifier2’
这句话出现说明结构体或者是类的成员函数或者是数据成员引用错了,可能拼写数据成员是拼错了。
11.error C2050: switch expression not integral
这句话的意思是switch中的表达式不是整数。我们知道switch()中必须写一个整型(char型也可以),注意,char类型可以,但是字符串就不行了,如果你加了双引号,可能会报这个错。
12.error C2057: expected constant expression
期待一个常量表达式。哈哈这个错误我们最长犯了,我们知道,数组声明时[]里面的必须是一个常量,如果你把里面写成变量,那就报这个错误。
13.error C2065: ‘xxx’ : undeclared identifier
identifier是标识符的意思。没定义标识符。这个错误有两种可能,一种是printf cin cout这些报错,那就是你忘记包含头文件了。
如果是自定义的变量报错,那就是你忘记声明变量了。
14.error C2078: too many initializers
初始值太多啦。这种情况一般是你定义的数组长度为n,但是你给的初始化的值要多于数组的元素个数。
15.error C2082: redefinition of formal parameter ‘xxx’
这里有一个我们经常见到的词组, formal parameter,我们知道parameter是参数的意思,而formal parameter的意思是形式参数。
说明你在函数体中重复定义了参数。
16.error C2087: ‘’ : missing subscript
subscript是下标的意思。这句话是告诉你下标丢失。一般是定义二维数组的时候忘记写第二个下标了
17.error C2105: ‘operator’ needs l-value
操作符需要左值。操作符使用不合理,如++运算符必须要对变量操作,但是
(a+b)++这个操作就不行。
18.error C2106: ‘operator’: left operand must be l-value
操作符的左操作数必须是左值。例如赋值运算符=,如果你这样写(a+b)=1;就会这样报错。
19.error C2117: ‘xxx’ : array bounds overflow
xxx数组边界溢出。