VC++中常见的编译错误及其解决方 中常见的编译错误及其解决方
第 1 编 直 错 ( 1 ) 字 译 : 在 误 符 串 常 量 、 . 一 部 error 号 常 量 中 分 字 符 常 量 中 出 分 C2001: 编 newline : 现 了 析 是 否 有 换 行 换 行 译 in 错 误 constant 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)整体 看 待 的 数 C2137: 字 empty character 。 constant 。
两 个 单 引 号 之 间 不 加 任 何 内 容 会 引 发 如 下 错 误 : error
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) 标志符遵循先申明后使用原则。所以,无论是变量、函数名、类名,都必须先定义,后使用。如使用在前,申明在后, 就 会 引 发 这