Turbo C++错误信息(V2.0) 

Author: Date: 1992-12-25

        本附录列出的出错信息中用单引号括起的单词 代表一个通用的名或值,用户在屏幕上看到的出错信息是把这个单词用具体的名或值取代后的信息。例如:如果有一个C++函数goforit出现错误,用户在屏幕上看到的实际信息为:
        goforit must be declared with no arguments
        要查阅这一条信息,必须找下面这一条信息:
        function must be declared with no arguments
        下面列出本附录错误信息中用引号括起来的通用名和值, 用户得到的出错信息应该先用相应的名或值取代,然后再查阅。
        手册中看到的   屏幕上看到的
        argument   一个命令行或其它参数
        class   一个类名
        field   一个域引用
        filename   一个文件名(扩展名可有可无)
        group   一个组名
        identifier  一个标识符(变量名或其它)
        Language 一个程序语言的名字
        member   数据成员或成员函数的名字
        message  一个信息串
        module   一个模块名
        number   一个实际数
        option   一个命令行或其它选择项
        parameter   一个参数名
        segment   一个段名
        specifier   一个类型说明符
        symbol   一个符号
        xxxxh   一个后面跟着h的4位十六进制数
        本附录按ASCII字母顺序列出出错信息。以符号(等号,逗号,括号等 )开头的信息通常放在前面。 由于上表列举的变量开头的错误信息不能以在屏幕上实际看到的出错信息的字母顺序排 列,所以所有这类信息总是放在每个错误信息表的开始处。
        如果变量出现在错误信息正文后面,例如:
        Incorrect command__Lineargument
        那么可以按这条出错信息的字母顺序查找,此处可在“I”开头的信息中找。
        一、运行错误
        Turbo C++只有少量运行错误信息。下面按字母顺序列出。
        ●Abnormal program termination程序不正常结束。这是因为程序在运行时发现内存不够造成的。另外, 调用函数abort将显示出该信息。有些运行错误在最后将调用abort函数,因此会显示出该信息。
        ●Divide by 0
        用整数除以0。该错误可被signal函数探知。另外,还将调用abort函数,并使程序非正常结束。
        ●Floating point error: Divide by 0
        除数为0。如1.0/0.0。
        ●Floating point error: Domain
        结果不是一个数。如,0.0/0.0。
        ●Floating point error: Overflow
        在完全丢失精度的情况下,结果是+∞或-∞。如:
        double x=le200*le200
        ●Floating point error: Partial loss of precision
        在浮点操作时,丢失了精度。缺省时该错误被屏蔽,可调用control87来消除屏蔽。
        ●Floating point error:Underflow
        浮点操作时产生下溢,下溢值用0.0替换。缺省时该错误被屏蔽,可调用control87 来消除屏蔽。
        ●Floating point error: Stack fault
        浮点操作引起堆栈溢出。该错误不常出现,可能是由于汇编码使用的寄存器太多, 或者是没有说明浮点函数。
        注意:上述这些浮点错误可以用函数control 187屏蔽,也可以用函数signal捕获。另外,这些浮点错误还将调用函数abort。以打印出:Abnormal program termination。并调用exit(3)。
        ●Null pointer assignment
        当一个small或medium内存模式的程序退出时, 将检查程序数据段开头的若干个字节的内容是否改变。如果这些字节内容被改变,则显示该信息, 通常这是因为有一个值被存进一个未初始化的指针中。尽管产生这个错误的程序在其它方面看上去运行正常,但它反映程序内部有严重错误,应对其予以重视。对一个未初始化的指针间接赋值可能导致不可预料的后果(在large、compact 或huge内存模式下,还可能出现“死锁”)。在集成调试器中可跟踪null指针。
        ●Stack overflow
        Turbo C++程序中堆栈缺省大小是4096字节。这对于大多数程序来说是足够的,但是当程序执行复杂递归或大量使用局部数据时可能出现堆栈溢出。 只有当打开堆栈检查功能时才可能得到该信息。若要改正此错误,可以换用较大的内存模式试一试, 或者通过改变全局变量stklen的值来增加堆栈大小,还可以减少程序对堆栈的使用。为了减少函数的局部数据数量,可以将其说明为静态变量(static)。例如:
        void anyfunction(void)
        {
        static int buf[2000]; /*分配在数据段中*/
        int list [2000]; /*分配在堆栈中*/
        将局部变量说明为static,有两个缺点:
        1.它将永久地占用全局变量和堆栈以外的空间,不过这还只是个小缺点。  2.若一个函数中的变量说明为静态的,那么该函数不能递归调用或异步调用。因为对于说明为Static的变量,每次调用函数时对该变量使用的是相同的空间而不是分开的空间。
        二、编译错误
        由Turbo C++编译器(TC或TCC)产生的诊断信息分为三类:致命错误、错误和警告。
        ●致命错误:使得编译过程立即停止。应该采取适当的解决办法,然后重新编译。
        ●错误:表示程序语法错误,磁盘或内存存取错误以及命令行错误。编译器将完成当前编译阶段,然后停止。并且编译器在每个编译阶段(预处理,分析,优化和代码生成) 都将尽可能多地找出源程序中的真正错误。
        ●警告:不终止编译过程。它表明条件有疑问,而这些条件作为语言的部分是合法的。当使用和机器有关的结构时,编译器总是生成警告信息。
        编译器按下列格式显示信息:先是信息类型,然后是文件名和行号, 最后才是信息内容。在下面的每类信息中将按照字母顺序列出。 
        1. 致命错误
        ●Bad call of inline function
        在使用一个宏定义的内部函数(预定义的宏)时没有用正确的方式调用它。C中预定义的内部函数是以双下划线(__)为开头和结尾的.
        ●Irreducible expression tree
        错误行上的某个表达式使得代码生成器无法产生代码。这是一个编译器内部错误,这时将不翻译该表达式。如果编译器曾出现过该错误,请通知Borland公司。
        ●Out of memory
        编译时内存溢出。要么增加机器内存,如果你的机器已有640K内存, 就应该简化源文件。
        ●Register allocation failure
        错误行上的某个表达式太复杂,以致代码生成器无法产生该表达式的代码。这也是一个编译器内部错误。请简化该表达式。如果出现此错误,请通知Borland公司。
        2.错误
        ●constructorcannot return a value
        C++的构造函数的return语句不能有一个表达式作为返回值。
        ●constructoris not a base class of class
        一个C++的类构造函数class试图调用一个基类构造函数constructor,或者是你试图改变class::constructor的访问权限。constructor不是class的一个基类。检查你的说明。
        ●functionlcannot be distinguished from function2
        函数1和2的说明中参数类型表的差别不足以区分它们。 可尝试将某一个函数中的参数类型或参数次序改变一下。
        ●functionis ambiguous
        在函数调用中,不止一个重载函数的参数表可以和调用的参数表匹配(使用缺省的参数转换规则)。应该对一个或多个参数进行显式类型转换来解决这种二义性问题。
        ●functionmust be declared with no arguments该C++操作符函数不能有参数。
        ●functionmust be declared with one argument该C++操作符函数只能有一个参数。
        ●functionmust be declared with two arguments该C++操作符函数必须有两个参数。
        ●functionwas previously declared without static该函数在此处说明为静态的,但在前面却已经说明为外部的(extern)或全局的。ANSI C不允许这种情况出现。
        ●functionwsa previously declared with the language language该函数在不同的地方用不同的语言修饰词(cdecl,pascal或interrupt)说明,这是错误的。
        ●identifier cannot be declared in an anonymous union无名的联合中不能有成员函数或静态成员。无名的联合只能包含数据成员。
        ●identifier cannot be used in static member function
        一个静态的成员函数只能使用它所在的类中的静态成员,尽管它有完全的访问权限。此错误是由于试图使用一个需要用this指针的成员。
        ●identifieris inaccessible because also in class
        将一个类既作为直接基类又作为间接基类是不合法的。 可使基类在两处说明为虚拟的。
        ●identifier is not a data member and cant be initialized here
        在一个构造函数中只能对数据成员初始化。 此信息表示初始化表中含有一个静态成员或函数成员。
        ●identifieris not a member of struct
        identifier被当作一个结构成员来引用,但它不是一个结构成员。请检查你的说明。
        ●identifieris not a parameter
        在一个旧形式函数定义的形参说明部分中idenitfier被说明,但却不是作为一个参数被列举的,可以去掉此说明或可把identifier作为一个参数。
        ●identifieris not legal here
        类型说明符identifier和其它类型名冲突或重复,或者它被当作一个typedef名字使用,而此时在这个作用域中它不是一个typedef名字。
        ●identifieris virtual and cannot be explicitly initialized
        一个C++类的构造函数试图调用一个基类构造函数identifier,但该基类是一个虚基类。 虚基类不能被显式地初始化,编译程序会自动地隐含调用基类的缺省构造函数base::base()。
        ●identifiermust be a member function
        大多数C++的操作符函数可以是类成员或普通的非成员函数,但有一些只能是类的成员函数。这些是operator=、operator→和operator()及以及类型转换。
        ●identifiermust be a member function or have an argument of class type
        大多数操作符函数必须有一个显式或隐式的类类型参数。 此操作符函数在类外说明且没有 一个显式的类类型参数。
        ●identifiermust be a previously defined class or struct
        企图把identifier说明为一个基类,但它不是一个类,或者它还没有被完全定义。 请修改该名字或重新排列这些说明。
        ●identifier must be a previously defined enumeration tag
        企图把identifier作为枚举标记使用,但是它还没有被说明。纠正此名字或将说明重新排 列。
        ●identifiermust be a previouslyde fined structure tag企图把idebtififier作为结构标记作用,但是还没有被说明。纠正此名字或将说明重新排列。
        ●identifierspecifies multiple or duplicate access
        一个基类可以被说明为public或private,但不能两者都有,该访问说明符对一个基类只能出现一次。
        ●memberis not accessible
        C++类成员member被说明为private或protected,因此不能从该函数中引用。有时出现在企图调用一个可访问的重载成员函数(或构造函数)中,但是其参数匹配一个不可访问的函数。重载函数检查总是在可访问性检查之前完成,如果是这个问题,请试着用一个或多个参数的显式类型转换来选择期望的可访问函数。
        ●specifierhas already been included
        此类型说明符在当前说明中出现了一次以上,删除或改变其中的一次。
        ●=expected
        变量初始化时缺赋值运算符(=)。
        ●,expected
        在一个说明表、初始化表或参数表中缺逗号(,)。
        ●{expected
        一个块或初始化表的开头缺左花括号({)。
        ●(expected
        参数表前缺左圆括号。
        ●}expected
        一个块或初始化表的结尾缺右花括号(})
        ●)expected
        参数表尾缺右圆括号。
        ●:expected after private /protected/public
        保留字private/protected/public的后面必须是一个冒号(:)。
        ●::requires a preceding identifier in this context
        在一个说明中,C++双冒号(::) 的前面必须有一个限定类名。而非限定的双冒号只能用在表达式中来指明全局作用域,而不能用在一个说明中。
        ●.*operands do not match
        C++点星操作符(.*)的右边必须是一个指针,指向该操作符左边给出的类的一个成员。
        ●#operator not followed by macro argument name
        在宏定义中,#可用来指明将其后的宏参数替换为一个串,因此#后面必须是一个宏参数名。
        ●Access can only be changed to public or protected
        一个C++派生类可以修改一个基类成员的访问权限,但是只能变为public或protected。 一个基类成员不能为private。
        ●Access declarations cannot grant or reduce access
        一个C++的派生类可以修改一个基类成员的访问权限,但只能恢复它为基类中的访问权限,不能加大或减少它的访问权限。
        ●Access specifier specifier found in a union
        C++存取说明符public private protected不能用在联合中。
        ●Ambiguity between functionl and function2
        两个命名的重载函数同时使用所提供的参数,不允许这种二义性。
        ●Ambiguous conversion functions:typeland type2
        企图用多种方法将一个已提供的类型转换到期望的类型。
        ●Array bounds missing]
        在数组说明中缺右方括号(])。
        ●Array must have at least one element
        ANSI C和C++要求数组被定义为至少有一个元素。以前的一个程序设计技巧是把结构的数组成员说明为零元素长,然后用函数malloc来分配实际所需的空间。现在仍然可以使用这个技巧,但是数组长度至少有一个元素。当然,长度未知大小的数组说明(注意, 不同于定义)是允许的。
        例如:
        char ray[];  /*未知长度的定义_非法*/ 
        char ray[0]; /*长度为0的定义_非法*/ 
        extern char ray[];/*未知长的说明_OK*/
        ●Array of references is not allowed
        引用类型的数组是非法的。 因为不允许有指向引用的指针和数组名被强制转换成指针。
        ●Array size too large
        数组长度超过64K字节。
        ●Assembler statement too long
        内嵌式汇编语句的代码长度不能超过480字节。
        ●Attempting to return a reference to local name identifier
        一个C++的函数返回一个引用类型,但你试图返回一个指向局部(自动)变量的引用, 这是非法的。因为在函数退出时这个引用所指的变量就没有了。可以返回一个指向任何静态的或全局变量的引用或者可以改变这个函数为返回一个值。
        ●Bad file name format in include directive包含文件名必须用双引号(“”)或尖括号(<>)括起来。
        ●Bad ifdef directive syntax#指令必须有一个标识符(并且没有其它东西)作为指令体。
        ●Bad ifndef directive syntax同前一条错误信息。
        ●Bad return type for a type conversion operator
        C++类型转换成员函数指定了一个不同于该类型本身的返回类型。对转换函数operator T 的说明不能指定任何返回类型。
        ●Bad syntax for pure function definition
        纯虚函数由说明时加=0来表示的。你写的程序与此类似,但不完全一样。
        ●Bad undef directive syntax#undef指令必须有一个标识符(并且没有别的东西)作为指令体。
        ●Base classclassis included more than once
        一个C++的类可以从许多个基类直接派生而来,但一个指; 定的基类只能被直接派生一次。
        ●Base class class is initialized more than once
        在一个C++的类构造函数中,跟在构造函数头后面的初始化表不止一次包含了基类class。
        ●Base  class cannot be declared protected
        C++基类必须是public或private,但不能是protected。
        ●Bit field cannot be static
        只有普通的C++类数据成员可以被说明为static,而位域则不行。
        ●Bit fields must by signed or unsigned int
        位域必须被说明为一个有符号或无符号的整数类型。在ANSI C中,位域只能是signed或unsigned int类型,而不能是char或long等类型。
        ●Bit fields must contain at least one bit 
        已命名的位域的宽度不能是零(或小于0)。而一个未命名位域的宽度可以是0,这是一种约定,用来将后面的位域成员的地址强制对齐为字节边界(或者是字边界,如果使用了-a选择项的话)。
        ●Bit field too large
        给出的位域宽度超过了16位。
        ●Body already defined for this function
        同一个函数只能有一个函数体。
        ●Call of non-function
        被调用的名字没有被说明为一个函数。可能是函数说明有错或函数名拼错。
        ●Cannot assign1identifier1 to identifier2
        赋值运算符(=)(或复合赋值运算符,如+=)的两边必须类型兼容 ,且不能是数组。你企图把类型为identifier1右边表达式赋给类型为identifier2的左边目标。
        ●Cannot call mainfrom within the program
        C++不允许递归调用函数main。
        ●Canot cast from identifier1 to identifier2
        类型identifier1到identifier2的强制转换是不允许的。
        在C中,一个指针可以转换成整型或另一个指针。一个整型可以转换为任何整型、浮点型或指针类型。一个浮点类型可以转换为一个整型或浮点类型。结构和数组不能互相转换。通常不能将一个Void类型转换。
        在C++中,检查用户定义的转换和构造函数是否存在,如果不存在的话,就应用上述的规则(除了指向类成员的指针外)。在整型类型中,只有常数0可能转换成成员指针。
        成员指针可能转换成一整型量或类似的成员指针。 如果一个成员指针原先指向一数据成员或函数成员;那么类似的成员指针也可指向一个数据成员或函数成员,进行类型转换的限定类必须是和原来相同的或是原来类的基类。
        ●Cannot create Variable for abstract class class 
        抽象类_那些具有纯虚函数的类_不能直接使用,只能用来派生其它类。
        ●Connot define a pointer or reference to a reference
        不允许有指向引用的指针或指向引用的引用。
        ●Cannot find class::class (class&) to copy a vector
        当一个C++的类class1包含有一个类clsaa2的数组(向量)时, 而你又想从类Class1的另一个对象中构造类Class1的一个对象,这就需要一个class2::class2(class2&)的构造函数,这样数组元素才能被构造, 这个构造函数只有一个参数(指向它的类的引用)并称为一个引用构造函数。
        通常编译程序自动地提供一个引用构造函数,但是你为类class2定义了一个构造函数,此构造函数有一个class&的参数和带缺省值的附加参数, 这样的引用构造函数既不存在也不能被编译程序所产生。这是因为无法区分class2::class2(class2&)和class2::class2(class2&,int=1)。你必须重新定义这个构造函数使之不是所有的参数都有缺省值。然后你可以定义一个引用构造函数或由编译程序产生一个。
        ●Cannot find identifier::identifier()to initialize a vector
        当一个C++的类class1包含一个类class2的数组(向量)时,而你又想构造一个不是从类class1的另一个对象中构造一个类class1的对象,就需要一个构造函数class2::class2(),这样数组的元素才能被构造。 这个无参数的构造函数称为缺省构造函数。编译程序会自动提供一个缺省构造函数,除非你已定义过任何类class2的构造函数。那样的话,编译程序是不会自动提供缺省构造函数的,用户必须提供一个。
        ●cannot find class::class()to initialize base class
        每当要构造一个C++的派生类class2时,必须先构造它的每一个基类class1。如果class2的构造函数没有说明一个class1(作为class2的头部)的构造函数,就必须有一个class1::class1()作为基类的构造函数。编译程序会自动提供一个缺省构造函数,除非你已定义过任何类class1的构造函数。那样的话, 编译程序是不会自动提供缺省构造函数的,用户必须提供一个。
        ●Cannot find class::class() to initialize field identifier
        当一个C++类class1包含一个类class2的成员时,而你希望构造一个类class1的对象但不是从类class1的另一个对象中构造,就必须有一个class2::class2()的构造函数,才能构造这样的成员。 这个无参数构造函数称作缺省构造函数。编译程序将自动提供一个缺省构造函数,除非你为类class2定义过任何构造函数,这样的话编译程序是不会自动提供缺省的构造函数的,用户必须提供一个。
        ●cannot find class::operator=(class&) to copy a vector
        当一个C++类class包含一个类class2的一个数组(向量)时而你又想复制一个类class1,就必须有一个赋值操作符class2::operator=(class2&)才能复制数组的元素。通常编译程序自动提供这样的操作符。 但是如果你对类class2已有一个operator=定义,但没有用一个类型为class2的参数,编译程序不会自动提供,你必须自己提供一个。
        ●Cannot have a near member in a far class
        一个C++类的所有成员都必须是far型的,其成员是一个先前说明为near(或缺省)的类。
        ●Cannot initialize a field
        不能对结构和联合以及C++类初始化单个域。结构和联合可以使用初始化表来初始化,而C++类则只能通过使用构造函数来初始化。
        ●Cannot initialize type1 with type2
        企图用类型为type2的值来初始化一个类型为type1的目标,初始化规则基本上和赋值相同。
        ●Cannot modify a const object这指明对说明为const的对象的非法操作,比如赋值给该对象。
        ●Cannot overload main函数main不能被重载。
        ●Cannot specify base classes except when defining the class
        当指定一个C++类时,派生该类的那些基类只能在该类定义的那一点被指定。当只说明类标记时(如class c;),不能指定这些基类。
        ●Case outside of switch 
        case语句出现在switch语句之外。这通常是因为括号不匹配造成的。
        ●Case statement missing:
        case语句必须在常数表达式后紧跟一个冒号。case语句中的表达式或者遗漏了冒号或者在冒号前有另外的符号。
        ●Character constant too long
        字符常数只能是一或两个字符长。
        ●Classclasshas a constructor and cannot be hidden
        C中的结构名和一般名字有不同的名字空间,而C++中通常可以共享名字空间。C++ 中可以区分带有构造函数的类,因为构造函数的说明和一般函数说明 很相象, 可以避免这种混淆。
        ●Classes cannot be initialized with{}
        通常的C结构可用花括号中的一组值来初始化,C++类只能用构造函数对其初始化,如果该类有构造函数,私有成员、虚函数或虚基类的话。
        ●Class member member declared outside its class
        C++类成员函数只能在类说明之内被说明。不同于非成员函数。 它们不能被说明多次或者在其它地方说明。
        ●Compound statement missing}
        程序结尾缺少闭花括号。可能是括号不配对。
        ●Conflicting type modifiers
        这出现在一个指针的说明中同时给出了near和far关键字。 对一个指针只能用一个地址修饰符(far或near),对一个函数只能用一个语言修饰(cdecl,pascal,interrupt)说明。
        ●Constant expression requird
        说明数组时必须固定给出其大小。通常此类错误是因为拼错一个#define常量。
        ●Constructor cannot have a return type specification
        C++构造函数有一个隐含的由编译器使用的返回类型, 但你不能说明一个返回类型或返回一个值。
        ●Conversion of near pointer not allowed
        当程序当前不在运行时,表达式计算框中的near指针不能被转换为far指针。这是因为转换需要知道用户程序中DS寄存器当前值,而用户程序不存在。
        ●Could not find a match for argument (s) 找不到一个C++函数其参数与你提供的参数相匹配。
        ●Could not find file file name  编译程序找不到命令行上给出的文件。●Declaration does not specify a tag or an identifier
        该说明没有说明任何东西,这可能是一个结构,联合无标记或变量,C++要求此处应给以说明。
        ●Declaration is not allowed here  说明不能被用作for,while,do,if或switch控制语句。
        ●Declaration missing;  结构或联合成员的域的说明后面缺分号。
        ●Declaration syntax error  说明中缺某些符号或者有多余的符号。
        ●Declaration terminated incorrectly
        一个说明有额外的或不正确的结束符号。如函数体后面放了一个分号。在一个类开头和左花括号之间加一个分号的C++成员函数的说明也会产生此错误。
        ●Declaration was expected
        缺说明。通常是因为缺界符(如逗号、分号、右圆括号及右花括号)引起的。
        ●Declare operator delete (void*) or (void*, size__t)
        delete运算符可以只有一个void*类型的参数,还可以再加一个类型为size__t的第二个参数。 后一种形式比前一种形式优先使用,全局运算符delete已被说明为后一种形式,因此若想重新说明则必须小心。
        ●Default outside of switch
        default语句出现在switch语句之外。可能是括号不匹配引起的。
        ●Default value missing
        若在C++函数说明中,有一个参数有缺省值,那么它后面的所有参数都必须有缺省值。
        ●Define directive needs an identifier
        #define之后的第一个非空白符必须是一个标识符。
        ●Destructor cannot have a return type specification
        C++释放函数不能返回一个值,也不能给它指定一个返回类型。
        ●Destructor for classis not accessible
        这个C++类的释放函数是protected或private,此处不能被调用来释放该类。如果一个类的释放函数是private,这个类就不能被释放,也就不能被使用。说明为protected的释放函数只能被派生类访问, 这种方法用来保证不会创建任何基类的实例而只能从基类中派生类。
        ●Destructor name must match the class name
        在一个C++的类中用否定号(~)来说明该类的释放函数,释放函数的名字和类名相同,只是在其前面加(~)号。在你的程序中把~号用在其它名字前面。
        ●Division by zero 在一个常数表达式中,求余或除法运算的除数为零。
        ●do statement must have whiledo语句缺while关键字。
        ●do -while statement missing(do语句中,while关键字后面缺)。
        ●do -while statement missing(do语句中,测试表达式后面缺)。
        ●do-while statement missing;do语句测试表达式的右圆括号后面缺分号。
        ●Duplicate caseswitch语句的每一个case都必须有唯一的常数表达式值。
        ●Enum syntax error枚举说明不能包含一个格式不正确的标识符。
        ●Error directive:message
        这条错误信息是源程序中的#error伪指令被处理时产生的, 该指令的正文被显示在此信息中 (取代massage)
        ●Error writing output file
        当编译器在写,OBJ、,EXE或临时文件时出现了 DOS错误。可能是磁盘空间不够,或者是用 -n选择项 (或Options |Directories|Output输入框)给出的目录不正确。
        ●Expression expected
        缺表达式。当前的符号不能做为表达式开头。该信息可以出现在if 或while语句的控制表达式或者变量初始化等处。它常常是不小心插入或删除一个符号。
        ●Expression if too complicated
        编译程序可以处理相当复杂的表达式,但有成百上千项的表达式太复杂。请分成两个或更多的表达式。
        ●Expression of arithmetic type expected
        一元加(+)和一元减(-)运算符的操作数必须是算术类型表达式__只能是char、short、int、long、enum、float、double及 long double类型。
        ●Expression of integral type expected
        求反运算符(~)的操作数必须是整数类型表达式(char、short、int、long及 enum)。
        ●Expression of scalar type expected
        运算符(!)、(++)及(_)的操作数类型错误。只能是标量类型:char, short, int, long, enum, float, double, longdouble和指针类型。
        ●Expression syntax
        当编译器分析一个表达式的语法时,若 发现一些严重错误则给出这一条总的信息。可能是有两个连续的操作符、括号不匹配或遗漏 ,也可能是前一条语句缺分号。
        ●Expression type does not match the return typereturn表达式的类型不能转换为该函数的返回类型。
        ●extern variable cannot be initialized存储类型为extern的变量不能在说明中初始化。
        ●Extra parameter in call当通过原型定义的指针调用函数时,参数给多了。
        ●Extra parameter in call function对命名函数(用原型定义)调用时参数太多。
        ●Field field cannot be used without an object在class::field式中,field是一个一般(非静态)成员, 并且此处没有和该域有关的类。例如写为obj。class::field是合法的,不应该写成  chass::field。
        ●Field field is ambiguous in class
        你必须用合格的基类名来限定这个域引用。在C++类class中,域field 可出现不止一个的基类中,也没有被限定指明是哪一个。这只适于多重继承中, 因为在多重继承中每个基类名不能在一个由同样基类派生出来的派生类中被相同的域名隐藏。C++语言规则要求在检查访问权限 (private, protected, public)之前先测试这种二义性。因此只有一个( 或没有)域可被访问,也可以得到这个信息。
        ●Field identifier expected
        缺一个结构或C++类域名字。元素选择运算符(或→)的右边必须是其左边的结构或类中的一个域名字。
        ●File must contain at least one external declaration
        ANSI C 和C++要求编译单元至少包含一些说明,不能为空。
        ●Flie name too long
        #include伪指令给出的文件名太长(应该不超过79个字符)。
        ●For statement missing(for关键字后缺左圆括号)。
        ●For statement missing)for语句的控制表达式之后缺右圆括号。
        ●For statement missing;for语句的某个表达式后面缺分号。
        ●Found: instead of::在说明及表达式中,C++类名字和其成员之间应用双冒号(::)分开,而不是冒号(:)
        ●Friend declarations need a function signature如果说明一个友元函数,必须同时提供参数类型,这样在重载时才能找到正确的函数。
        ●Friends must be functions or classes, not fieldsC++类的friend必须是一个函数或另一个类,一个域不能是一个friend。
        ●Function call missing)函数调用的参数表出现某种语法错,比如漏了右括号或右括号不匹配。
        ●Function calls not supported
        在集成调试器表达式计算中,不允许出现函数(包括隐式转换函数,构造函数释放函数,重载操作符,内部函数)调用。
        ●function defined inline after use as extern
        函数 在使用之后不能再成为内部函数。要么将内部定义移到文件的前头, 要么将其整个删掉。
        ●Function definition cannot be a typedefed declaration
        在C++中,不能用typedef名字来定义一个函数。例如,类型F表示无参数且返回int类型的函数:typedef int F (void);则,象下面这样把g定义F为类型的函数是非法的:
        F g { / * 。。.* / }
        但是可以象下面这样,定义g为返回指向类型F的指针的函数:
        F *g (...) {/ * ... * / }
        ●Function function cannot be static
        只有普通成员函数及运算符new和delete可以被说明为静态的。而构造函数、 释放函数及其它运算符都不行。
        ●Functions cannot return arrays or functions  函数不能返回一个数组或函数,但可以返回指向它们的指针。
        ●Function should return a value一个有返回值的函数却没有return语句或有return语句但没给出返回值。
        ●functions may not be part of a struct or union函数不能作为C结构或联合的成员。但指向函数的指针可以是C 结构或联合成员,而C++中允许函数为成员。
        ●Global anonymous union not staticC++中,在文件级的全局无名联合必须是静态的。
        ●Goto statement missing labelgoto关键字的后面必须跟一个标识符。
        ●Group overflowed maximum size:name在组(如DGROUP)中所有段的大小之和超过64K。
        ●Identifieridentifier cannot have a type qualifier此处不能用C++的限定名class::identifier。 限定名不能用于typedef名字,函数说明(除了在文件级的定义中),局部变量或函数的参数中,或一个类成员( 除了用它本身类名作为限定,这是多作的但合法)。
        ●Identifier expected
        在C中。在一旧式函数头的参数表中缺标识符。
        ●If statement missing(if关键字后缺左圆括号。
        ●If statement missing)if语句的测试表达式之后缺右圆括号。
        ●Illegal character character (Oxvalue)输入文件中有无效字符,其十六进制值被打印出来。该错误也可能是由于将多余的参数传递给一个函数宏引起的。
        ●Illegal initialization
        初始化必须是常数表达式,但其中可以出现一个全局extern 或static变量的地址加上或减去一常量。
        ●Illegal octal digit  八进制常数中出现了非八进制数字(如8或9)
        ●Illegal parameter tomit
        ●Illegal pointer subtraction不能用非指针值减去指针。
        ●Illegal structure operation
        对结构的操作非法。只能对结构使用元素选择(.)、取地址(&)及赋值(=)运算, 或者以参数形式传送给函数或从函数返回。
        ●Illegal to take address of bit field  取一个位域成员地址的操作是非法的,虽然可以取其它类型域的地址。
        ●Illegal use of floating point对浮点数执行了非法运算(如移位,位布尔操作,条件(?:)或某些其它操作)>。
        ●Illegal use of pointer非法指针运算。指针运算只能为加、减、赋值、比较,间接引用(*)或→操作
        ●Im proper use of typedef identifier你的源文件中在表达式中应出现一个变量的地方却出现了typedef名。 检查符号的说明和可能的拼写错误。
        ●Improper use of typedef symbol同上一条错误信息。
        ●In compatible type conversion不能执行所要求的类型转换。
        ●Incorrect command-line option:option不认识的命令行参数。