附录A常见的编译错误信息VC编译器能提示大量的警告与错误信息。当编译器的信息输出窗口中提示错误信息时,点击错误信息序号,按下F1 键,MSDN 马上显示该错误信息的详细说明。全部错误信息的详细内容在MSDN 的下列目录中能查到:V isual C Documentation Using Visual C Visual C Promgrammer‟s Guide Build Errors 错误是指程序的语法错误,编译时发现错误将不能进行项目连接操作。警告是指程序中出现了疑似语法问题,这些问题从语法的角度来说是合法的,不会影响编译,也可以不予理会,继续进行项目连接,但警告信息通常说明程序有可能存在潜在的问题,会导致程序运行错误,因此,仍应该认真检查警告有信息提示的问题,出原因,及时改正。对同一个语法问题,编译器有时会给出多条信息,因此,相似的警告与错误信息常常同时出现。但是,警告与错误的数量并不代表程序问题的严重性。另一方面,警告与错误信息的定位一般只有参考意义,修改时应对前后语句、前后函数、甚至整个源程序文件都要进行检查。对于初学编程的人而言,理解开发工具提示的错误信息还需要掌握一定的计算机专业词汇,即使有的开发工具已作了处理,但错误信息一般仍以英语显示。不过这些信息的词汇量并不大,只要注意学习,就能很快掌握。下面列出部分常见的错误信息,按错误序号排列。需要注意的是,在VC的错误提示中,发生在不同程序结构、不同的上下文环境里的相似的错误,可能以不同序号给出提示。由于篇幅所限,本书只列出按一个序号列出一种提示。  A.1 错误信息
Error C2001:newline in constant串常量没有以双引号结束,或在新的一行中继续定义串常量。该错误可能由串常量分隔符不完整引起。
Error C2006:include expected a filename found token宏命令include 后缺少文件名。
Error C2011:identifier : type type redefinition标识符identifier已经被定义为类型type。重复定义类型名identifier。
Error C2012:missing name following lt在宏命令include 中缺少文件名。
Error C2013:missing gt在宏命令include lt文件名gt中缺少右定界符gt。
Error C2015:too many characters in constant字符常量中字符太多。字符常量只能有一个字符,或以‟‟开头的转义字符。
Error C2017:illegal escape sequence非法的以‟‟开头的字符序列。
Error C2019:expected preprocessor directive found character要求预编译命令。该错误可能是由于书写预编译命令时漏写了‟‟。
Error C2020:member : class member redefinition重复定义类或结构中的成员。
Error C2022:number : too big for character在一个字符表示中,八进制‟xxx‟数值太大不能转换为对应的ASCII 字符。
Error C2023:divide by 0表达式除以0。Error C2024:mod by 0表达式中对0 作模运算。Error C2025:identifier : enum/struct/union type redefinition标识符identifier已经用作enum/struct/union 等类型的标识。
Error C2026:string too big trailing characters truncated字符串太长。超过2048 个字符将被截去。
Error C2027:use of undefined type identifier类型名identifier未经定义就使用。
Error C2037:left of operator specifies undefined struct/union ident ifier成员选择运算符-gt or .的左侧不是类、结构、联合等类型的变量。
Error C2039:identifier1 : is not a member of identifier2标识符identifier1不是identifier2的成员分量。Error C2041:illegal digit character for base number对于数制number而言数字character是非法字符。如:int num081//八进制的有效数字字符是07。
Error C2043:illegal break非法使用break 语句。break 语句只能在while do while for switch 语句中使用。
字符串常量的定界符是什么Error C2045:identifier : label redefined标号重复定义。Error C2046:illegal case非法使用case。case 只能用于switch 语句中。
Error C2047:illegal default非法使用default。default 只能用于switch 语句中。
Error C2048:more than one defaultdefault 多次出现。在switch 语句中default 只能有一个。Error C2049:case value value already used在一个switch 语句中,同一个case 的取值多次出现。
Error C2050:switch expression not integralswitch 表达式的值不是整型。
Error C2051:case expression not constantcase 表达式不是常量表达式。
Error C2052:case expression not integralcase 表达式不是整型常量表达式。
Error C2054:expected to follow identifier在标识符identifier后需要括号。在表达式中有不正确的运算符可能会引入该错误。
Error C2056:illegal expression非法表达式。
Error C2057:expected constant expression需要常量表达式。
Error C2059:syntax error : token在程序的文本(用token表示)中有语法错误。请检查该文本前后的内容。
Error C2060:syntax error : end of file found发现文件结束。该错误通常是由缺少分号、右侧花括号不配对等情况引起。
Error C2061:syntax error : identifier identifier标识符identifier有语法错误。提示该标识符前后可能有语法问题。
Error C2062:type type unexpected类型名type出现在不该出现的地方,也可能是此处语法所需的类型已经定义。该错误常常会因漏写分号引起。
Error C2063:identifier : not a function标识符identifier不是函数名。
Error C2064:term does not evaluate to a function不能通过某项计算出函数的地址。可能是调用的函数不存在。
Error C2065:identifier : undeclared identifier标识符identifier未作说明。Error C2070:illegal sizeof operand非法操作数。sizeof 表达式中的操作数既不是类型名,也不是合法表达式。Error C2071:identifier : illegal storage class变量identifier被说明为非法的存储类别。Error C2075:identifier : array initialization needs curly braces数组元素初始化需要使用花括号。Error C2078:too many initializers初始化参数太多。初始化参数多于被初始化的对象。Error C2083:struct/union comparison illegal结构或
联合类型的变量进行比较运算是非法的。用户自定义类型的变量,没有定义比较运算操作,或没有定义与普通类型的转换,一般不能直接进行比较运算。
Error C2084:function function already has a body函数体重复定义。
Error C2086:identifier : redefinition标识符identifier重复定义。
Error C2087:identifier : missing subscript数组identifier缺少下标。
Error C2088:operator : illegal for class-key类没有定义对运算符operator的重载。
Error C2089:identifier : class-key too large类的规模超过64K。
Error C2090:function returns array函数返回数组。函数不能返回数组,但可以返回一个指向数组的指针。
Error C2097:illegal initialization非法初始化操作。如:用一个非常量值初始化变量。
Error C2100:illegal indirection非法的指针操作。
Error C2102:amp requires l-value地址运算符amp需要对左值表达式进行运算。左值表达式是指能表示
一个变量存储位置的表达式,如变量、数组元素等。
Error C2105:operator needs l-value运算符operator需要左值操作数。
Error C2108:subscript is not of integral type下标值不是整型。
Error C2109:subscript requires array or pointer type下标运算只能用于数组或指针。
Error C2110:cannot add two pointers不能对两个指针进行加运算。
Error C2111:pointer addition requires integral operand指针只能对整数进行加运算。
Error C2112:pointer subtraction requires integral or pointer operand指针的减运算只能对整数或指针进行。
Error C2117:identifier : array bounds overflow数组范围溢出。该错误常常因数组的初始化值超过数组长度而引起。如:char abc4 quotabcdquot // error array contains 5 members
Error C2134:identifier : struct/union too large结构或共用体(联合)太大。结构或联合类型的字节数超过编译器规定的64K。
Error C2138:illegal to define an enumeration without any members定义无成员的枚举类型。Error C2139:type following identifier is illegal在标识符identifier后出现类型名是非法的。Error C2141:value out of range for enum constant枚举常量超出范围。
Error C2144:syntax error : missing token before type type在类型名type前漏了一个语法元素(用token表示)。这个错误通常由于少了右花括号…‟或分号引起。
Error C2145:syntax error : missing token before identifier在标识符前漏了一个语法元素(用token表示)。这个错误通常由于少了分号引起。
Error C2148:array too large数组太大,超过64K。
Error C2166:l-value specifies const object试图对常量进行修改,错误地把左值指定为常量对象。
Error C2172:function : actual parameter is not a pointer : parameter number函数的实参不是指针。
Error C2181:illegal else without matching if非法使用else。if 与else 不匹配。
Error C2182:identifier : illegal use of type void非法使用void 定义变量,void 只能用于函数参数传递。Error C2184:illegal return of a void value函数没有返回值。
Error C2197:identifier : too many actual parameters函数调用中实参太多。
Error C2198:identifier : too few actual parameters函数调用中实参太少。
Error C2202:function : not all control paths return a value函数function中并非所有分支路径都能返回值。
Error C2203:delete operator cannot specify bounds for an arraydelete 运算不能指定数组长度。如:delete 4 ArrayOfObjects // error正确:delete ArrayOfObjects
Error C2221:. : left operand points to class/struct/union. use –gt成员分量运算.的左操作数应是class/struct/union 的变量名。如果是指向class/struct/union 的指针,请使用–gt。
Error C2222:-gt : left operand has class/struct/union type use .运算符-gt使用错误。左操作数是class/struct/union 的变量名。请使用.。
Error C2230:operator : indirection to different types指针引用的类型错误。
Error C2234:name : arrays of references are illegal引用名name使用错误。对数组的引用是非法的。Error C2235:in formal parameter list在形式参数列表中使用分号。
Error C2239:unexpected token token following declaration of identifier在标识符后不该出现的某个符号(token)。
Error C2440:conversion : cannot convert from type1 to type2不能把类型type1转换为类型type2。Error C2241:identifier : member access is restricted不能访问成员。
Error C2244:identifier : unable to resolve function overload不能解析函数重载。无法通过实参与形参的对应关系辨识重载的函数调用。
Error C2245:nonexistent function identifier specified as friend把一个不存在的函数说明为友元。
Error C2247:identifier not accessible because classB uses xxxxxx to inherit fromclassA不能访问变量identifier。因为类classB是通过xxxxxx继承方式从classA继承而来的
Error C2248:member : cannot access xxxxxx member declared in class class不能访问类class (类名)的xxxxxx(privateprotected)成员member.
Error C2249:identifier : no accessible path to access member declared in virtualbase class不能访问虚基类的成员。Error C2251:identifier : defined but not declared标识符被定义但缺少说明。如:定义了析构函数,但在类的规格说明中没有说明析构函数原型。
Error C2252:identifier : pure specifier can only be specified for functionsidentifier不能作纯虚指定,只有函数能说明为纯虚函数。
Error C2255:function : a friend function can only be declared in a classfunction不能在类的外部说明为友元。只能在类的内部说明友元。
Error C2256:illegal use of friend specifier on destructor析构函数非法使用友元限定。
Error C2258:illegal pure syntax must be 0纯虚函数说明语法错误。纯虚函数必须使用0。Error C2262:identifier : cannot be destroyedidentifier不能被销毁。该错误可能是因为定义了私有的析构函数。Error C2279:cannot use braces to initialize default arguments不能使用初始化默认参数。Error C2280:missing before identifier identifier在标识符identifier前漏了。Error C2281:identifier1 : is not a function but contains ltfunction returninggtidentifier2 is unexpectedidentifier1不是函数,但有函数返回值。identifier2不应该出现在此处。
Error C2296:operator : bad left operand运算符operator有一个错误的左操作数。
Error C2297:operator : bad right operand运算符operator有一个错误的右操作数。
Error C2298:operation : illegal operation on pointer to member function expression错误的成员函数表
达式。
Error C2300:identifier : class does not have a destructor called identifier类没有定义析构函数identifier。
Error C2320:expected : to follow access specifier specifier访问控制关键字(如publicprivate protected)后需要冒号。
Error C2333:function : error in function declaration skipping function body在函数function定义中有错误,编译将跳过函数体。这样的错误常常由于前面其它的错误引起,请先修改前面出现的错误。
Error C2350:identifier is not a static member标识符identifier不是静态成员。
Error C2352:class::function : illegal call of non-static member function非法调用非静态成员函数。
Error C2353:constructor : improper use of constructor initializers构造函数constructor的初始化列表不正确。
Error C2355:this : can only be referenced inside non-static member functionsthis指针只能在非静态函数成员内有效。
Error C2360:initialization of identifier is skipped by case label对变量identifier的初始化操作可能因跳过某个case 的取值而不能执行。建议把变量的定义与初始化放在函数开始部位。下面的程序会出现这种错误信息:void func void int xswitch x case 0 :int i 1 // error skipped by case 1 int j 1 // OK initialized in enclosing blockcase 1 :int k 1 // OK initialization not skipped Error C2369:identifier : redefinition different subscripts变量(数组)identifier使用不同的范围值重复定义。Error C2371:identifier : redefinition different basic types变量identifier使用
不同的基本类型重复定义。
Error C2385:class::member is ambiguous类成员的名称出现岐义。Error C2437:identifier : already initialized变量identifier已经初始化。
Error C2439:identifier : member could not be initialized不能在进行类的定义时初始化数据成员。
Error C2446:operator : no conversion from type1 to type2运算符操作中没有定义从类型type1 到类型type2的转换。
Error C2447:missing function header old-style formal list遗漏函数头部说明。该错误通常出现在下面的程序中:int c // error 没有函数头部说明另一种错误形式:int funint i//函数头部后多了一个分号
Error C2452:array bound expression of type type is illegaltype类型的数组长度表达式是非法的。
Error C2460:identifier1 : uses identifier2 which is being defined 变在变量identifier1的定义中使用了变量identifier2,量identifier2正在定义。出现了“递归”定义。如:struct studentstudent nextOne // error 结构student 的类型定义尚未完成请注意下面的定义是正确的:struct student…student next // 正确,此处定义的是指向student 类型的指针
Error C2461:class : constructor syntax missing formal parameters构造函数需要形参。
Error C2464:identifier : cannot use new to allocate a reference不能用new 运算分配一个引用。Error C2466:cannot allocate an array of constant size 0不能申请长度为0 的数组。
Error C2501:identifier : missing storage-class or type specifiers变量identifier没有指定存储类或类型。请检查使用的自定义类型是否正确定义。
Error C2502:identifier : too many access modifiers on the base class基类有太多的访问权限修饰。如:class A class C : private public A // error
Error C2504:class: base class undefined类只有说明而没有定义。如:class A// error A is undefinedclass B : public A // the error is detected here Error C2507:identifier : too many virtual modif
iers on the base class类的定义中有太多的virtual 修饰。class A class B : virtual virtual public A // error
Error C2508:identifier : access denied不允许对变量identifier进行访问。
Error C2509:identifier : member function not declared in class类中没有说明成员函数identifier。
Error C2510:identifier : left of :: must be a class/struct/union运算符::左侧的标识符identifier 必须是class。
Error C2511:identifier : overloaded member function not found in class在类中没有重载的成员函数identifier。该错误也可能因编译系统不到形参可匹配的函数而出现。请检查函数参数类型、参数的数量和次序。
Error C2512:identifier : no appropriate default constructor available没有合适的默认构造函数。
Error C2514:class : class has no constructors类没有构造函数。
Error C2515:identifier : not in class classidentifier不是类的成员。
Error C2517:identifier : right of :: is undefined标识符identifier在域限定运算符::的右侧,没有定义该运算。在域限定运算符::的右侧的标识符只能是类(或结构)的成员、或是全局变量。
Error C2519:cannot convert type1 to type2 不能把第一种指针类型转换为第二种指针类型。Error C2521:destructors do not take parameters析构函数不带参数。
Error C2523:identifier1::identifier2 : destructor tag mismatch析构函数标识错误。析构函数名与类名不一致。
Error C2524:identifier : destructors must have a void formal parameter list析构函数形参必须是空。
Error C2529:name : reference to reference is illegal说明引用的引用是非法的。Error C2530:identifier : references must be in.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。