C++常见错误提示解释

1.编号:C2001

error C2001: newline in constant 

直译:在常量中出现了换行。

错误分析:

(1) 字符串常量、字符常量中是否有换行。

(2) 在这句语句中,某个字符串常量的尾部是否漏掉了双引号。

(3) 在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。

(4) 在这句语句中,某个字符常量的尾部是否漏掉了单引号。

(5) 是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。

 

2.编号:C2015

error C2015: too many characters in constant 

直译:字符常量中的字符太多了。

错误分析:

(1)单引号表示字符型常量。一般的,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。

(2)如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如: if (x == 'x || x == 'y') { … }

值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。两个单引号之间不加任何内容会引发如下错误:error C2137: empty character constant。 

拓展:The value of an integer character constant containing more than one character (e.g.,'ab'), or containing a character or escape sequence that does not map to a single-byteexecution character, is implementation-defined.
它的意义是由编译器决定的(或者更严格的,实现定义),在很多情况下解释为两个字符的值(注意,不一定是ASCII)放置于连续的两个字节中得到的int。

拓展:比如char a='1234';c++会认为单引号里的每一个数值都看做一个字符字面值,也就是说1 2 3 4各占一个字节,'1234'也就是一共占4个字节,然而char变量a只是占一个字节,初始化它的值却有4个字节,系统要从'1234'中截取一个字节的内容给a,然而是截取'1'给a吗?不是,是把'4'给a。因为在x86平台(http://baike.baidu.com/view/339142.htm)上,数据是以little-endian(http://baike.baidu.com/view/2368412.htm)的形式排列的,低位字节放在内存的低地址,高位字节放在内存的高地址。我们看'1234',从左到右从1到4,然而在计算机中存放的格式是从0x04到0x01,就是说'1234'的低位4存放在计算机的内存低地址位,'1234'的高位1存放在内存的高地址位,所以当把'1234'给变量a时,系统把内存中的地址中存放的4给a,其余的全部不要了

 

3. 编号:C2018

error C2018: unknown character '0x##' 

直译:未知字符‘0x##’。

错误分析:

0x##是字符ASC码的16进制表示法。这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。 

 

4.编号:C2141

error C2041: illegal digit '#' for base '8'

直译:在八进制中出现了非法的数字'#'(这个数字#通常是8或者9)。

错误分析:

如果某个数字常量以“0”开头(单纯的数字0除外),那么编译器会认为这是一个8进制数字。例如:“089”、“078”、“093”都是非法的,而“071”是合法的,等同于是进制中的“57”。 

 

5. 编号:C2374

error C2086: 'xxxx' : redefinition

直译:“xxxx”重复申明。

错误分析:

变量“xxxx”在同一作用域中定义了多次。检查“xxxx”的每一次定义,只保留一个,或者更改变量名。 

 

6. 编号:C2143

C2143: syntax error : missing ';' before (identifier) 'xxxx' 

直译:在(标志符)“xxxx”前缺少分号。

错误分析:

这是VC6的编译期最常见的误报,当出现这个错误时,往往所指的语句并没有错误,而是它的上一句语句发生了错误。其实,更合适的做法是编译器报告在上一句语句的尾部缺少分号。

上一句语句的很多种错误都会导致编译器报出这个错误:

(1) 上一句语句的末尾真的缺少分号。那么补上就可以了。

(2) 上一句语句不完整,或者有明显的语法错误,或者根本不能算上一句语句(有时候是无意中按到键盘所致)。

(3) 如果发现发生错误的语句是cpp文件的第一行语句,在本文件中检查没有错误,而且这个文件使用双引号包含了某个头文件,那么检查这个头文件,在这个头文件的尾部可能有错误。 

var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;

 

7.编号:C2137

error C2137: empty character constant 

直译:空的字符定义。

错误分析:

原因是连用了两个单引号,而中间没有任何字符。一般的,单引号表示字符型常量,单引号中必须有,也只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待)。两个单引号之间不加任何内容是不允许的。

需要注意的是:如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。

如果单引号中的字符数多于4个,会引发2015错误:error C2015: too many characters in constant。 

 

 

8.编号:C2166

error C2166: l-value specifies const object
错误分析:在const类型的函数中改变了类的非静态数据成员,这个时候需要使用mutable来修饰一下要在const成员函数中改变的非静态数据成员

如果是一个被声明为const类型函数表示该函数不会改变对象的状态,也就是该函数不会修改类的非静态数据成员,这个时候就需要用到mutable关键字了将要在常量函数中改变的值定义时前面加mutable,例如mutable int m_iX

 

9.编号:C2248

error C2248: 'm_strName' : cannot access private member declared in class 'Person'

错误分析:调用了Person类中的私有成员

去检查一下调用数据m_strName是不是private下的成员

 

 

10.编号:C2259

error C2259: 'Person' : cannot instantiate abstract class due to following members:

错误分析:不能实例化抽象类

就是要实例化的类中有纯虚函数~

 

11.编号:C1004

fatal error C1004: unexpected end of file found

错误分析:不能实例化抽象类

检查括号是否匹配,函数调用参数是否匹配,在类定义后要有分号,检查注释标记是否匹配,检查条件编译符号(#IF。。#ENDIF是否匹配),另再检查磁盘空间是否够大,空间不够时,也不能正常编译。

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值