Turbo C++ 30 常见错误信息.docx

上传人:b****5 文档编号:5931451 上传时间:2023-01-02 格式:DOCX 页数:35 大小:42.70KB
下载 相关 举报
Turbo C++ 30 常见错误信息.docx_第1页
第1页 / 共35页
Turbo C++ 30 常见错误信息.docx_第2页
第2页 / 共35页
Turbo C++ 30 常见错误信息.docx_第3页
第3页 / 共35页
Turbo C++ 30 常见错误信息.docx_第4页
第4页 / 共35页
Turbo C++ 30 常见错误信息.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

Turbo C++ 30 常见错误信息.docx

《Turbo C++ 30 常见错误信息.docx》由会员分享,可在线阅读,更多相关《Turbo C++ 30 常见错误信息.docx(35页珍藏版)》请在冰豆网上搜索。

Turbo C++ 30 常见错误信息.docx

TurboC++30常见错误信息

 

TurboC++编译错误信息分为3类:

致命错误(fatalerror),非致命错误(error)以及警告(warning).

(1)致命错误是很少的.当出现致命错误时,编译过程将会立即停止.用户必须采取适当的措施,并重新启动编译器.

(2)非致命错误是指程序的语法错误、磁盘或内存访问错误.编译器将会完成当前编译过程(预处理、分析、优化和代码生成)中找到错误.(3)警告不会影响编译过程的进行.它们指示那些可疑的情况,但是这些情况从语言角度来说是合法的.若在源文件中使用了与机器相关的结构时也会产生警告.

尽管警告不会影响编译和运行,但是它通常预示着编译方面的问题,有可能导致运行错误或运行结果错误.对于任何警告,我们仍应像看待编译错误那样去重视它.

错误信息按字母顺序给出.

每条错误信息中给出原因和修改方法.

致命错误和警告在行的左边有标注

 

错误信息

产生错误的原因

=expected

在变量初始化时要求赋值操作符.

expected

在声明列表、初始化列表或参数列表中要求有逗号.

{expected

在一个块或初始化开始处要求有一个左花括号.

(expected

对应一张参数表要求一个左括号.

}expected

在一个块或初始化结尾处要求用一个右花括号.

)expected

在一张参数表结尾处要求一个右括号.

:

expectedafterprivate/protected/public

当被用于一个C++类的段首时,这些保留字后面必须有一个冒号.

∷requiresaprecedingidentifierinthiscontex

在声明中遇到的一个C++双冒号没有前驱限定类名.该未限定的双冒号只可以用在指示全程域的表达式中,而不能用在声明中.

.*operandsdonotmatch

没有把C++点星操作符的右边声明为一个由操作符左边指定的类的成员指针.

#operatornotfollowedbymacroargumentname

在一个宏定义中,#可能用于把一个宏变量转换成一个串.#后面必须跟一个宏变量名.

Accesscanonlybechangedtopublicorprotected

一个C++派生类可以改变一个基类成员的访问权限,但只能改为public或protected.一个基类成员是private.

Accessdeclarationscannotgrandorreduceaccess

一个C++派生类可以改变一个基类的访问权限,但只限于基类的权限范围.它不能增加或减少访问权限.

Accessspecifierspecifierfoundinaunion

C++的访问说明符(public、private或protected)不能用在联合中.

Ambiguitybetweenfunction1andfunction2

这两个重载函数都可以带同样个数和类型.这种二义性是不允许的.

Ambiguousconversionfunction:

type1andtype2

编译器发现有多个类型转换的方向.这种二义性是不允许的.

(警告)Ambiguousoperatorsneedparentheses

该警告出现在有两个移位操作符、关系操作符或布尔操作符连用而又没有使用括号的情况.另外,二个加操作符或一个减操作符与一个移位操作符连用而又没有加括号时也会产生该警告.

Arrayboundsmissing]

源文件中声明了一个数组,但没有右中括号结束.

Arraymusthaveatleastoneelement

ANSIC和C++要求数组必须至少有一个元素(零长度对象是不允许的).

Arrayofreferencesisnotallowed

引用数组是非法的,因为不允许指向引用的指针,并且数组名被强制成为指针.

Arraysizetoolarge

被声明的数组大于64K.

Assemblerstatementtoolong

插入汇编语句不能长于480字节.

(警告)Assigningtypetoenumeration

把一个整型值赋给一个enum类型.这是一个错误,但把它当作一个警告是为了使程序能有机会继续进行.

Attemptingtoreturnareferencetolocalnameidentifier

该C++函数返回了一个引用类型,并且你试图返回一个局部(自动)变量的引用.这是非法的,因为被引用的变量在函数结束时也会消失.你可以返回任何静态或全程变量的引用,或者你可以修改函数使它返回一个值.

Attemptingtoreturnareferencetoatemporaryobject

在引用引用类型的函数中,试图返回一个临时对象(或许是一个构造符的结果或者一个函数调用的结果)的引用.由于该对象在函数返回时将会消失,因而该引用是非法的.

(致命错误)Badofinlinefunction

使用了一个来自宏定义的插入函数,但错误地调用了它.在C中的插入函数是以下双划线(__)开头和结尾的函数.

Badfilenameformatinincludedirective

包含文件名必须用引号(“FILENAME.H”)或用尖括号()括起来.该文件名没有用引号或尖括号括起来.若使用了宏#,单纯扩展结果文本是错误的,即没有用引号括起来.

Badifdefdirectivesyntax

一条非#ifdef指令必须含有一个标识符(并且不含别的东西)作为指令体.

Badreturntypeforatypeconvertionoperator

该C++类型转换成员函数指定了一个不同本身类型的返回类型.一条转换函数声明operator可能并不指定任何一种返回类型.

Badsyntaxforpurefunctiondefinition

纯虚函数通过在声明后加上“=0”而给出.你写出了类似的东西,但并不是正确的.

Badundefdirectivesyntax

一条#undef指令必须含一个标识符(并不含别的东西)作为指令体.

Badclassclassisincludedmorethanonce

一个C++类可以从任意多种基类中派生,但一次只能从一个给定类中直接派生.

Baseclassclassisinitializedmorethanonce

在一个C++类构造函数中,在构造函数头之后的初始化表包含了多次的基类class.

Baseclasscannotbedeclaredprotected

一个C++基类是public或private的,但不能是protected的(在C++高版本中允许).

Baseinitializationwithoutaclassnameisnowobsolete

在要求把基类名包含进去.Derived:

:

Derived(intI):

Base(i,1,)…

Bitfieldcannotbestatic

只有一般的C++类数据成员才能够被声明为static的,而位域是不能声明为static的.

Bitfieldmustbesignedorunsignedint

一个位域必须被声明为一个有符号或无符号的整型类型.在ANSIC/C++中,位域只能使有符号或无符号int(不能为char或long).

Bitfieldtoolarge

向一个位域提供了多于16的位时则会引起该错误.

Bodyalreadydefinedforthisfunction

一个具有该名和类型的函数已有一个函数体.一个函数体只能被定义一次.

(警告)Bothreturnandreturnwithavalueused

当前函数内含有或没有值的return语句.这对于C来说是合法的,但几乎总是错误的.有可能在该函数结束时省略了return语句.

Callofnon-function

被调用的函数名未被声明为一个函数.这通常是因错误地声明函数或拼错了函数名而引起的.

(警告)Calltofunctionfunctionwithnoprototype

若“Prototypesrequired”警告是有效的,并且你在没有为该函数function提供原型时调用了该函数,则该有该警告信息出现.

Cannotandorsubtractrelocatablesymbols

可以作用于一个汇编操作数中浮动符号上的算术操作只有一个常量的加或减.变量、过程、函数和标号都是浮动符号.

Cannotassignidentifier1toidentifier2

一个赋值符号(=)(或组合赋值操作符,如+=)的两边必须是可兼容的,并且必须不能为数组.该赋值符号右边具有类型identifier1,并能赋值给左边具有类型identifier2的对象.

Cannotcall’main’withintheprogram

C++不允许main的递归调用.

Cannotcastfromidentifiertoidentifier2

从类型identifier1到类型identifier2的转换是不允许的.

Cannotcreatavariableforabstractclassclass

抽象类不能直接被使用来定义对象,而只能从它派生类.

Cannotdefineapointerorreferencetoareference

一个指向引用的指针或一个指向引用的引用是非法的.

Cannotfindclass∷(class&)tocopeavector

必须通过重定义该构造函数使得并非其所有的参数都有默认值,然后可以定义一个拷贝构造函数或使编译器建立一个拷贝构造函数.

Cannotfindidentifier∷identifier()toinitializeavector

在C++中,当你声明了一个具有某种类X的向量(数组)时,必须要有一个构造函数X∷X()以便构造该向量的元素.没有参数的构造函数叫默认构造函数.除非定义了类X的构造函数,否则编译器将自动提供一个默认构造函数.当你定义了构造函数,则编译器将不会自动提供默认构造函数,惹你却必须要提供相应构造函数.

Cannotfindclass∷class()toinitializefieldidentifier

当C++类class1含有一个类class2成员,并且你希望构造类class1的一个对象但不从类class1的另一个对象构造,则必须要有一个构造函数class2∷class2()以便构造该成员.没有参数的构造函数称为默认构造函数.编译器将自动提供一个默认构造函数,除非你为类class2定义了一个构造函数,若是这样,编译器将不会自动提供默认构造函数,而你却必须提供一个.

Cannotfindclass∷operator=(class&)tocopyavector

当一个C++类class1含有一个具有类class2的向量(数组),并且你希望拷贝一个类class1的类对象,则必须要有一个赋值操作符class2∷operator=(class2&)以使能够拷贝向量元素.通常编译器自动提供该操作符.但若你为类class2定义了一个操作符,但不为带具有类型Class2&的参数的操作符,则编译器将不会自动提供之,而你都必须要提供.

Cannothaveanearmemberinafarclass

一个C++far类中的所有成员必须是far的.该成员是一个被声明(或默认)为near的成员.

Cannotinitializeafield

Struct、union和C++class的单个域不能初始化.一个struct或union可以用括号中的初始化表整个地初始化.一个C++class只可以用一个构造函数初始化.

Cannotinitializetype1withtype2

试图用一个具有类型type2的值初始化一个具有类型type1的对象,这是不允许的.初始化规则实质上与赋值规则相同.

Cannotmodifyaconstobject

这表明对一个声明为const的对象进行了非法操作,如对该对象赋值.

Cannotoverload‘main’

main是唯一不能重载的函数.

Cannotspecifybaseclassesexpectwhendefiningtheclasses

在指定一个C++类时,派生该类的基类只有在该类被定义时才可以指定.如果只声明了类,如classc;则不能指定基类.

Cannotusetinyorhugemodelwithwindows

Windows编程中是不允许小模式和巨模式的.

Casebypassesinitializationofalocalvariable

在C++中忽略对局部变量的初始化是非法的.

Caseconstantisoutrangeoftheselector

在case标识上的常量不在开关表达式的取值范围,因而该标识将永远不会被选择.例如,若switch表达式有类型int,但case标识的值大于最大的int值.

Caseoutsideofswitch

编译器在一个switch语句之外遇到一个case语句.这常常是因为括号不匹配所致.

Casestatementmissing:

一个case语句中的常量后面必须跟有一个冒号.在case语句中的这一表达式或者少了一个冒号,或者在冒号前多出来一个多余的符号.

Characterconstanttoolong

字符常量只可以有一个或两个字符长(C++中只可以有一个字符长).

Classescannotbeinitializedwith{}

一般的C结构可以用一对大括号内的一组值来初始化.在C++中,若类有构造函数、私有成员、成员函数或虚的基类时,该类只可以用构造函数初始化.

Classmembermemberdeclaredoutsideitsclass

C++类成员函数只可以在类声明中声明.不像非成员函数,它们不能多次声明或在别的地方声明.

(警告)Codehasnoeffect

当编译器遇到了一条没有用的语句时给出警告.该操作是不必要的,或许它意味着一种潜在的错误.

(致命错误)Complilertablelimitexceeded

该信息是由于编译器的一个内部表发生溢出所致.这通常是因为被编译的模块含有过多的C++类声明、过多的函数或过多的其它项.为编译器让出更多的可用空间往往是无济于事的,而简化被编译的文件常常是唯一的解决途径.

Compoundstatementmissing}

编译器达到了源文件尾时没有找到与右花括号.这通常是因为括号不配对而致.

Conflictingtypemodifier

当一个声明对于同一个指针既声明为near又声明为far的时候引起该信息.只可以将一个地址修饰符对应一个指针,将一个语言修饰符(cdecl、pascal和interrupt)对应一个函数.

(警告)Constantislong

当编译器遇到一个大于32767的十进制常量或大于65535的八进制(或十六进制)常量,其后面没有跟11或L.该常量应被当作一个长整型long处理.

(警告)Constantoutofrangeincomparison

源文件中含有一个有关常理子表达式的比较,该子表达式超出了另一个子表达式类型所允许的范围.例如,把一个unsigned量与-1比较是没有意义的.要得到一个大于32767(十进制)的unsigned常量,应该把常量转换成unsigned(例如:

(unsigned)65535),或在常量的后面添加一个字母或U(例如:

65535u).

Constructorcannothaveareturntypespecification

C++构造函数具有为编译器所有的隐式返回类型,但你不能声明一个返回型或返回一个值.

Constructorisnoabaseofclass

一个C++类构造函数class试图调用一个基类构造函数constructor,或者你试图改变class:

:

construct的访问权限.如果construct不是一个class的基类,则检查你的声明.

(警告)Conversionmaylosesignificantdigits

对于一个赋值操作符或在某些别的情况下,源文件需要一个从long\unsignedlong或unsignedint的转换.由于int的类型和long类型变量的长度不相同,这中转换可能会导致一个程序的行为改变.

Conversionofnearpointernotallowed

当一个程序当前不能运行时,在表达式计值框中一个near指针可能转换成一个far指针.这是因为该转换需要用户程序中的DS(数据段DATA地址)当前值,而它并不存在.

Couldnotfindamatchforargument(s)

找不到参数与变量相匹配的C++函数.

Couldnotfindfilefilename

编译器在命令行中找不到文件.

Declarationdoesnotspecifyatagoridentifier

该声明什么也没有声明.C++需要其声明某个对象.

Declaratiaonmissing;

源文件中含有一个后面缺少分号的struct或union声明.

Declaratiaonterminatedincorrectly

一条声明具有一个或多余的或不正确的结束符号,如一个分号被放在一个函数体外.一个在C++类中声明的成员函数或普通函数,在其首部与左括号之间有一个分号也会导致错误.

Declaratiaonwasexpected

这里需要有一个声明,但是没有找到它.这通常是由于缺少了分割符,如一个逗号、分号、左括号或右括号等而引起的.

(警告)Declarefunctionpriortoinuseprototype

当一个函数原型上用了一个结构类型,该结构类型原来没有被声明过,在原型内部的声明与原型外部的声名不同.

Declareoperatordelete(void*)or(void*,)or(void*,size-t)

声明有一个参数void*或还有另一个具有类型size-t的参数的操作符delete已声明为有两个函数,要覆盖该声明是必须要小心.

Defaultoutsideofswitch

编择器在一条switch语句之外遇到了一条default语句.这通常是由于括号不匹配引起的.

Defaultvaluemissing

当一个C++函数声明一个参数有默认值,则其后的所有参数也必须有默认值.在该声明中,一个有默认值的参数后面跟一个没有默认值的参数.

Definedirecttiveneedsanidentifier

在#define之前的第一个非空格字符必须是一个标识符,编译器发现的却是别的字符.

Desttructorcannothaveatypespecification

C++构造函数从来不是一个返回值,因而不能声明一个返回类型或返回一个值.

Desttructorforclassisnotaccessible

C++类的构造函数为protected或pravite的,在这里不能访问以用来构造该类.若一个析构函数是pravite的,该类对象将不能被析构,因此永远不能被使用,这可能是一个错误.一个protected析构函数只可以从派生类访问.这对于保证没有一个基类实例被建立,而只从它派生出的类中析构是很有用的方法.

Desttructorforclassrequiredisconditionalexpression

若编译器必须要在一个条件表达式中建立一个临时局部变量,没有适当的地方调用构造函数,因为变量可能已经或不曾被初始化过.该临时变量可以显示的建立,如用classname(val,Val),或隐式地用别的代码建立.修改你的代码以删除该临时值.

Desttructornamemustmatchtheclassname

在一个C++类中,它引出了类构造函数的声明.构造函数名必须与类名相同.

(警告)Divisionbyzero

在一个除法或取余表达式中有一个零除数.

dostatementmusthavewhile.

源文件中含有一条do语句,但缺少后面的while关键字.

do-whilestatementmissing(

在一条do语句中,编译器在while关键字之后没有找到左括号.

do-whilestatementmissing)

在一条do语句中,编译器在测试表达式之后,没有找到又有扩好.

do-whilestatementmissing;

在一条do语句的测试表达式中,编译器在有括号后没有找到分号.

Duplicatecase

一条switch语句的每一case必须有一个唯一的常量表达式.

Enumsyntaxerror

一个enum声明含有不正确的表示符表.

Errorderectivemessage

有一条#error指令在源文件中被处理时引起该信息.该指令文件在该message中给出.

Errorwrtingoutputfile

阻碍BorlandC++写一个OBJ、EXE或临时文件的一个DOS错误.检查-n或optionsdirectries|output目录.在检查师傅有足够的磁盘空间.

Expressionexpected

在这里需要一个表达式,但当前符号却不能引起一个表达式.该信息可能出现在一条if或while自居的控制表达式需要出现的地方,或可能出现在一个变量被初始化的地方.这可能是由于在源文件中哦然的增删了符号而致.

Expressionistocomplicated

编译器了处理非常复杂的表达式,但默写具有成千上万各项的表达式会被认为是很负载的表达式.可把该表达式分解成两条或多条语句.

Expressionofarithmetictypeexpected

一元加(+)和一元减(-)操作符要求一个具有算术类型的表达式——只有类型char,short,int,long,enum,float,double,和longdouble是允许的.

Expressionsyntaxerror

当编译器分析一个表达式是遇到某个严重错误是生成的错误信息.这通常了能使由于两个连续的操作、括号不匹配或缺少括号,或者是在前一语句中缺少分号引起的.

Expressiontypedosenotmatchthereturntype

return表达式的类型不能转换成函数的返回类型.

Exte

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1