RAD Studio (Common)
ContentsIndex
PreviousUpNext
Error Messages (Delphi)

This section lists all the Delphi compiler error and warning messages of RAD Studio.

Name 
Description 
No further Help is available for this message or warning. 
A thread local variable cannot refer to another variable, nor can it reference an absolute memory address.  
The use of absolute variables is prohibited when compiling to byte code. 
No further information is available for this error or warning. 
A class cannot be both final and abstract.
Final is a restrictive modifier used to prevent extension of a class (or prevent overrides on methods), while the abstract modifier signals the intention to use a class as a base class. 
You have declared <name> to be abstract, but the compiler has found a definition for the method in the source file. It is illegal to provide a definition for an abstract declaration.  
When declaring an abstract method in a base class, it must either be of regular virtual or dynamic virtual type.  
A class cannot be both sealed and abstract.
The sealed modifier is used to prevent inheritance of a class, while the abstract modifier signals the intention to use a class as a base class. 
The address-of operator, @, cannot be used when compiling to byte code. 
Based on the current overload list for the specified function, and the programmed invocation, the compiler is unable to determine which version of the procedure should be invoked.  
The compiler has detected an overflow in an arithmetic expression: the result of the expression is too large to be represented in 32 bits.
Check your computations to ensure that the value can be represented by the computer hardware. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
The standard procedure SetLength has been called to alter the length of a dynamic array, but no array dimensions have been specified.  
It is illegal to assign a value to the for loop control variable inside the for loop.
If the purpose is to leave the loop prematurely, use a break or goto statement.  
This warning message is currently unused. 
You should not receive this error as 486 instructions are always enabled. 
You have specified an inline assembler statement which is not correct.  
The inline assembler was expecting to find a constant but did not find one.  
The inline assembler has encountered an expression which results in a division by zero.  
The inline assembler recognized an identifier on the right side of a '.', but it was not a field of the record found on the left side of the '.'. One common, yet difficult to realize, error of this sort is to use a record with a field called 'ch' - the inline assembler will always interpret 'ch' to be a register name.  
The inline assembler has expected to find a memory reference expression but did not find one.
Ensure that the offending statement is indeed a memory reference. 
The inline assembler has found an error in the numeric constant you entered.  
The size required by the instruction operand does not match the size given.  
The inline assembler has detected a numeric overflow in one of your expressions.  
You have specified an illegal combination of registers in a inline assembler statement. Please refer to an assembly language guide for more information on addressing modes allowed on the Intel 80x86 family.  
The inline assembler is not able to add or subtract memory address which may be changed by the linker.  
Your inline assembler code has exceeded the capacity of the inline assembler.
Contact CodeGear if you encounter this error. 
The inline assembler has not found the end of the string that you specified. The most likely cause is a misplaced closing quote.  
You have entered an expression which the inline assembler is unable to interpret as a valid assembly instruction.  
Contact CodeGear if you receive this error. 
The Common Language Runtime specifies that an attribute argument must be a constant expression, a typeof expression or an array creation expression. Attribute arguments cannot be global variables, for example. Attribute instances are constructed at compile-time and incorporated into the assembly metadata, so no run-time information can be used to construct them. 
This error occurs if an object file loaded with a $L or $LINK directive is not of the correct format. Several restrictions must be met:
  • Check the naming restrictions on segment names in the help file
  • Not more than 10 segments
  • Not more than 255 external symbols
  • Not more than 50 local names in LNAMES records
  • LEDATA and LIDATA records must be in offset order
  • No THREAD subrecords are supported in FIXU32 records
  • Only 32-bit offsets can be fixed up
  • Only segment and self relative fixups
  • Target of a fixup must be a segment, a group or an EXTDEF
  • Object... more 
This warning is given when an object file linked in with a $L or $LINK directive contains a definition for a symbol that was not declared in Delphi as an external procedure, but as something else (e.g. a variable).
The definition in the object will be ignored in this case. 
If a data type cannot be converted by the compiler into a Variant, then it is not allowed in an OLE automation call.  
Published properties must be an ordinal type, Single, Double, Extended, Comp, a string type, a set type which fits in 32 bits, or a method pointer type. When any other property type is encountered in a published section, the compiler will remove the published attribute -$M+  
This error occurs when you try to read a variable in a Read or Readln that is not of a legal type.
Check the type of the variable and make sure you are not missing a dereferencing, indexing or field selection operator.  
This error message occurs if the compiler finds the beginning of a scale factor (an 'E' or 'e' character) in a number, but no digits follow it.  
You are trying to link object modules into your program with the $L compiler directive. However, the object file is too complex for the compiler to handle. For example, you may be trying to link in a C++ object file. This is not supported. 
The compiler is looking for a special function which resides in System.dcu but could not find it. Your System unit is either corrupted or obsolete.
Make sure there are no conflicts in your library search path which can point to another System.dcu. Try reinstalling System.dcu. If neither of these solutions work, contact CodeGear Developer Support. 
The compiler failed to find a special function in System, indicating that the unit found in your search paths is either corrupted or obsolete. 
You are attempting to construct an array using a type which is not allowed in variable arrays.  
This message indicates that you are trying to make a method call and are passing a type that the compiler does not know how to marshall. Variants can hold interfaces, but the interfaces can marshall only certain types.
On Windows, Delphi supports COM and SOAP interfaces and can call types that these interfaces can marshall. 
This error occurs when you try to output a type in a Write or Writeln statement that is not legal.  
The interface part of a unit can only contain declarations, not statements.
Move the bodies of procedures to the implementation part.  
This error message occurs when the compiler can determine that a constant is outside the legal range. This can occur for instance if you assign a constant to a variable of subrange type.  
The compiler has found a BREAK or CONTINUE statement which is not contained inside a WHILE or REPEAT loop. These two constructs are only legal in loops.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
It is not legal to specify both $WEAKPACKAGEUNIT and $DENYPACKAGEUNIT. Correct the source code and recompile. 
This message indicates that you are trying to export a function or procedure that is tagged with the local directive. You also, cannot export threadvars and you would receive this message if you try to do so. 
File types (including type Text), and the type Variant cannot be initialized, that is, you cannot declare typed constants or initialized variables of these types.  
No further information is available for this error or warning. 
You are attempting to put a unit which was compiled with $DENYPACKAGEUNIT into a package. It is not possible to put a unit compiled with the $DENYPACKAGEUNIT direction into a package. 
An attempt has been made to publish a field in a class which is not a class nor interface type.  
This message is not used in dccil. The message applies only to Win32 compilations, where it indicates that a parameter or function result type in the method is not a publishable type. 
This message occurs when you try to call a symbol from within a procedure or function that has been tagged with the local directive.
The local directive, which marks routines as unavailable for export, is platform-specific and has no effect in Windows programming.
On Linux, the local directive is used for routines that are compiled into a library but are not exported. This directive can be specified for standalone procedures and functions, but not for methods. A routine declared with local, for example,  
The CLR requires that property accessors be methods, not fields. The Delphi language allows you to specify fields as property accessors. The Delphi compiler will generate the necessary methods behind the scenes. CLS recommends a specific naming convention for property accessor methods: get_propname and set_propname. If the accessors for a property are not methods, or if the given methods do not match the CLS name pattern, the Delphi compiler will attempt to generate methods with CLS conforming names. If a method already exists in the class that matches the CLS name pattern, but it is not associated with the particular... more 
Because a FINALLY clause may be entered and exited through the exception handling mechanism or through normal program control, the explicit control flow of your program may not be followed. When the FINALLY is entered through the exception handling mechanism, it is not possible to exit the clause with BREAK, CONTINUE, or EXIT - when the finally clause is being executed by the exception handling system, control must return to the exception handling system.  
You have provided a label inside a case statement which cannot be produced by the case statement control variable. -W  
This attribute can only be used once per target Attributes and their descendants may be declared with an AttributeUsage Attribute which describes how a custom Attribute may be used. If the use of an attribute violates AttributeUsage.allowmultiple then this error will be raised. 
Attribute is not valid on this target. Attributes and their descendants may be declared with an AttributeUsage Attribute which describes how a custom Attribute may be used. If the use of an attribute violates AttributeUsage.validon property then this error will be raised. AttributeUsage.validon specifies the application element that this attribute may be applied to. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
One or more units use each other in their interface parts.
As the compiler has to translate the interface part of a unit before any other unit can use it, the compiler must be able to find a compilation order for the interface parts of the units.
Check whether all the units in the uses clauses are really necessary, and whether some can be moved to the implementation part of a unit instead.  
The tokens that follow "class" in a member declaration inside a class type are limited to procedure, function, var, and property. 
Corresponds to object_local in previous compilers. Class and interface types cannot be declared inside a procedure body. 
Record types that are declared in local scopes or declared in-place in variable declarations can only contain field declarations. For advanced features in record types (such as methods, properties, and nested types), the record type must be an explicitly declared global type. 
Class or interface types must always be declared with an explicit type declaration in a type section. Unlike record types, they cannot be anonymous.
The main reason for this is that there would be no way you could declare the methods of that type (since there is no type name).
Incorrect (attempting to declare a class type within a variable declaration):  
No further information is available for this error or warning. 
The compiler was, due to the Delphi language syntax, expecting to find a clause1 in your program, but instead found clause2.  
No further information is available for this error or warning. 
A for-in statement can only operate on the following collection types:
  • Primitive types that the compiler recognizes, such as arrays, sets or strings
  • Types that implement IEnumerable
  • Types that implement the GetEnumerator pattern as documented in the Delphi Language Guide
Ensure that the specified type meets these requirements. 
To mathematically combine signed and unsigned types correctly the compiler must promote both operands to the next larger size data type and then perform the combination.
To see why this is necessary, consider two operands, an Integer with the value -128 and a Cardinal with the value 130. The Cardinal type has one more digit of precision than the Integer type, and thus comparing the two values cannot accurately be performed in only 32 bits. The proper solution for the compiler is to promote both these types to a larger, common, size and then to perform the comparison.
The compiler... more 
This error message occurs when the compiler expected two types to be compatible (meaning very similar), but in fact, they turned out to be different. This error occurs in many different situations - for example when a read or write clause in a property mentions a method whose parameter list does not match the property, or when a parameter to a standard procedure or function is of the wrong type.
This error can also occur when two units both declare a type of the same name. When a procedure from an imported unit has a parameter of the same-named type,... more 
The compiler has detected a difference between the declaration and use of a procedure.  
This error message results when the compiler expected two types to be compatible (or similar), but they turned out to be different.  
To compare signed and unsigned types correctly the compiler must promote both operands to the next larger size data type.
To see why this is necessary, consider two operands, a Shortint with the value -128 and a Byte with the value 130. The Byte type has one more digit of precision than the Shortint type, and thus comparing the two values cannot accurately be performed in only 8 bits. The proper solution for the compiler is to promote both these types to a larger, common, size and then to perform the comparison.  
The compiler has determined that the expression will always evaluate to False. This most often can be the result of a boundary test against a specific variable type, for example, a Integer against $80000000.
In versions of the Delphi compiler prior to 12.0, the hexadecimal constant $80000000 would have been a negative Integer value, but with the introduction of the int64 type, this same constant now becomes a positive int64 type. As a result, comparisons of this constant against Integer variables will no longer behave as they once did.
As this is a warning rather than an error, there is... more 
The compiler has determined that the expression will always evaluate to true. This most often can be the result of a boundary test against a specific variable type, for example, a Integer against $80000000.
In versions of the CodeGear Pascal compiler prior to 12.0, the hexadecimal constant $80000000 would have been a negative Integer value, but with the introduction of the int64 type, this same constant now becomes a positive int64 type. As a result, comparisons of this constant against Integer variables will no longer behave as they once did.
As this is a warning rather than an error, there... more 
The compiler expected a constant expression here, but the expression it found turned out not to be constant.  
Open array arguments must be supplied with an actual array variable, a constructed array or a single variable of the argument's element type.  
This error message occurs when the compiler expects a type, but finds a symbol that is neither a constant (a constant could start a subrange type), nor a type identifier.  
This error message is reserved. 
You have incorrectly tried to put a constructor or destructor into the 'automated' section of a class declaration.  
The code you are compiling is constructing instances of classes which contain abstract methods.  
No further information is available for this error or warning. 
Record types that are declared in local scopes or declared in-place in variable declarations can only contain field declarations. For advanced features in record types (such as methods, properties, and nested types), the record type must be an explicitly declared global type. 
Because of the language features used, standard C object files cannot be generated for this unit. You must generate C++ object files. 
No further information is available for this error or warning. 
An inherited constructor has been initialized multiple times. 
This message is not used in this product. 
Any character in a WideString constant with ordinal value greater than 127 may be replaced with "?" if the WideChar is not representable in the current locale codepage. 
An AnsiChar can only represent the first 256 values in a WideChar, so the second byte of the WideChar is lost when converting it to an AnsiChar. You may wish to use WideChar instead of AnsiChar to avoid information loss. 
When using default parameters a list of parameters followed by a type is not allowed; you must specify each variable and its default value individually.  
When using default parameters a list of parameters followed by a type is not allowed; you must specify each variable and its default value individually.  
The default property which you have specified for the class is not an array property. Default properties are required to be array properties.  
The default parameter mechanism incorporated into the Delphi compiler allows only simple types to be initialized in this manner. You have attempted to use a type that is not supported.  
Parameters which are given default values cannot be passed by reference.  
You have tried to assign a default property to a class which already has defined a default property.  
You have declared a property containing a default clause, but the type property type is incompatible with default values.  
You are using a trial version of the software. It is incompatible with the application you are trying to run. 
The address to which you are attempting to put a value is inaccessible from within the IDE. 
The integrated debugger has determined that your assignment is not valid in the current context. 
The compiler will generate IDisposable support for a class that declares a destructor override named "Destroy". You cannot manually implement IDisposable and implement a destructor on the same class. 
This error occurs if a unit must be recompiled to take in changes to another unit, but the source for the unit that needs recompilation is not found.
Note: This error message may be experienced when using inline functions. Expansion of an inline function exposes its implementation to all units that call the function. When a function is inline, modifications to that function must be reflected with a recompile of every unit that uses that function. This is true even if all of the modifications occur in the implementation
section. This is one way in which inlining can make your... more 
A directive was encountered during the parsing of an interface which is not allowed.  
An interface type specified with dispinterface cannot specify an ancestor interface.  
Methods declared in a dispinterface type cannot specify any calling convention directives.  
When using dispinterface types, you must always be sure to include a GUID specification for them.  
A dispid has been given to a property which is not in an automated section.  
You have added a label to a property defined in a dispinterface, but this is disallowed by the language definition.  
This error message is issued when an identifier given in the parameter list to Dispose is not a destructor.  
Disposed_ cannot be declared in classes with destructors. If a class implements the IDispose interface the compiler generates a field called Disposed_ to determine whether or not the IDispose.Dispose method has already been called. 
The compiler has detected a constant division by zero in your program.
Check your constant expressions and respecify them so that a division by zero error will not occur. 
The compiler emits DLLImport attributes internally for external function declarations. This error is raised if you declare your own DLLImport attribute on a function and use the external name clause on the function. 
This error message is given when a constant appears more than once in the declaration of a variant record.  
No further information is available for this error or warning. 
This error message occurs when there is more than one case label with a given value in a case statement.  
An object file is being generated and Two, differently named, constructors or destructors with identical parameter lists have been created; they will be inaccessible if the code is translated to an HPP file because constructor and destructor names are converted to the class name. In C++ these duplicate declarations will appear to be the same function.  
An attempt to use a dispid which is already assigned to another member of this class.  
Within a class, you cannot publish multiple overloaded methods with the same name. Maintenance of runtime type information requires a unique name for each published member.  
The compiler has encountered two different property declarations which claim to implement the same interface. An interface may be implemented by only one property.  
This error occurs when symbols from separate units are combined into a common namespace, and the same symbol name is in both units. In previous versions of Delphi, these units may have compiled without error, because symbol scope was defined by the unit alone. In RAD Studio, units must be inserted into namespaces when generating the IL metadata. This may cause separate units to be be combined into a single namespace.
To resolve this problem, you may wish to rename one of the symbols in the two units, alias one of the symbols to the other, or change the unit... more 
You have specified an index for a dynamic method which is already used by another dynamic method.  
A method with an identical signature already exists in the data type.  
Only one member of a set of overloaded functions may be published because the RTTI generated for procedures only contains the name.  
A resource linked into the project has the same type and name, or same type and resource ID, as another resource linked into the project. (In Delphi, duplicate resources are ignored with a warning. In Kylix, duplicates cause an error.) 
No further information is available for this error or warning. 
A resource linked into the project has the same type and name, or same type and resource ID, as another resource linked into the project. (In Delphi, duplicate resources are ignored with a warning. In Kylix, duplicates cause an error.) 
To avoid this error, declare an explicit set type identifier instead of using in-place anonymous set expressions. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
You have incorrectly put a dynamic or message method into an 'automated' section of a class declaration.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
The compiler was expecting to find a FINALLY or EXCEPT keyword, during the processing of exception handling code, but did not find either.  
This error message appears for syntax errors. There is probably a typo in the source, or something was left out. When the error occurs at the beginning of a line, the actual error is often on the previous line.  
An EXPORTS clause has been encountered in the program source at a non-global scope.  
You have attempted to assign the result of an expression, which did not produce a value, to a variable. 
The sealed modifier is used to prevent inheritance (and thus extension) of a class. 
The standard procedure Fail can only be called from within a constructor - it is illegal otherwise. 
You have attempted to add more fields to a class after the first method or property declaration has been encountered. You must place all field definitions before methods and properties.  
You have tried to place a field definition in an OLE automation section of a class declaration. Only properties and methods may be declared in an 'automated' section.  
You are attempting to reference a instance member from within a class procedure.  
An interface has been encountered which contains definitions of fields; this is not permitted.  
The file permissions are not properly set on a file. See the chmod man page for more information. 
The compiler encountered an error while closing an input or output file.
This should rarely happen. If it does, the most likely cause is a full or bad disk. 
The compiler could not create an output file. This can be a compiled unit file (.dcu ), an executable file, a map file or an object file.
Most likely causes are a nonexistent directory or a write protected file or disk. 
The compiler state file has become corrupted. It is not possible to reload the previous compiler state.
Delete the corrupt file. 
A file path specified in the compiler options exceeds the compiler's file buffer length. 
This error message occurs when the compiler cannot find an input file. This can be a source file, a compiled unit file (.dcuil file), an include, an object file or a resource file.
Check the spelling of the name and the relevant search path.  
This error message occurs when the compiler cannot find a referenced unit (.dcuil) file.
Check the spelling of the referenced file name and the relevant search path. 
The compiler encountered a read error on an input file.
This should never happen - if it does, the most likely cause is corrupt data. 
The compiler encountered a seek error on an input or output file.
This should never happen - if it does, the most likely cause is corrupt data. 
File types are not allowed as value parameters and as the base type of a file type itself. They are also not allowed as function return types, and you cannot assign them - those errors will however produce a different error message.  
The compiler encountered a write error while writing to an output file.
Most likely, the output disk is full. 
No further information is available for this error or warning. 
Certain types are treated specially by the compiler on an internal basis in that they must be correctly finalized to release any resources that they might currently own. Because the compiler cannot determine what type is actually stored in a record's variant section at runtime, it is not possible to guarantee that these special data types are correctly finalized.  
Certain types are treated specially by the compiler on an internal basis in that they must be correctly finalized to release any resources that they might currently own. Because the compiler cannot determine what type is actually stored in a record's variant section at runtime, it is not possible to guarantee that these special data types are correctly finalized.  
A 16-bit fixup has been found in one of the object modules linked to your program with the $L compiler directive. The compiler only supports 32 bit fixups in linked object modules.
Make sure that the linked object module is a 32 bit object module. 
This warning is issued if the value of a for loop control variable is used after the loop.
You can only rely on the final value of a for loop control variable if the loop is left with a goto or exit statement.
The purpose of this restriction is to enable the compiler to generate efficient code for the for loop.  
An attempt has been made to pass the control variable of a FOR-loop to a procedure or function which takes a var parameter. This is a warning because the procedure which receives the control variable is able to modify it, thereby changing the semantics of the FOR-loop which issued the call.  
The control variable of a for loop must have type Boolean, Char, WideChar, Integer, an enumerated type, or a subrange type.  
This error message is given when the control variable of a for statement is not a simple variable (but a component of a record, for instance), or if it is not local to the procedure containing the for statement.
For backward compatibility reasons, it is legal to use a global variable as the control variable - the compiler gives a warning in this case. Note that using a local variable will also generate more efficient code.  
This error message occurs when the declaration of a procedure, function, method, constructor or destructor differs from its previous (forward) declaration.
This error message also occurs when you try to override a virtual method, but the overriding method has a different parameter list, calling convention etc.  
This error message appears when you have a forward or external declaration of a procedure or function, or a declaration of a method in a class or object type, and you don't define the procedure, function or method anywhere.
Maybe the definition is really missing, or maybe its name is just misspelled.
Note that a declaration of a procedure or function in the interface section of a unit is equivalent to a forward declaration - you have to supply the implementation (the body of the procedure or function) in the implementation section.
Similarly, the declaration of a method in a... more 
This warning is given when there is still source text after the final end and the period that constitute the logical end of the program. Possibly the nesting of begin-end is inconsistent (there is one end too many somewhere). Check whether you intended the source text to be ignored by the compiler - maybe it is actually quite important.  
The GOTO statement cannot jump into or out of an exception handling statement.  
Class helpers cannot declare destructors. 
The integrated debugger is attempting to use some of the compiler helper functions to perform the requested evaluate. The linker, on the other hand, determined that the helper function was not actually used by the program and it did not link it into the program.
  1. Create a new application.
  2. Place a button on the form.
  3. Double click the button to be taken to the 'click' method.
  4. Add a global variable, 'v', of type String to the interface section.
  5. Add a global variable, 'p', of type PChar to the interface section.
The click method should read as:
  1. procedure TForm1.Button1Click(Sender: TObject); begin... more 
You have declared a method which has the same name as a virtual method in the base class. Your new method is not a virtual method; it will hide access to the base's method of the same name.  
A property has been created in a class with the same name of a variable contained in one of the base classes. One possible, and not altogether apparent, reason for getting this error is that a new version of the base class hierarchy has been installed and it contains new member variables which have names identical to your properties' names. -W  
It is not possible to use the standard function HIGH with long strings. The standard function HIGH can, however, be applied to old-style short strings.
Since long strings dynamically size themselves, no analog to the HIGH function can be used.
This error can be caused if you are porting a 16-bit application, in which case the only string type available was a short string. If this is the case, you can turn off the long strings with the $H command line switch or the long-form directive $LONGSTRINGS.
If the HIGH was applied to a string parameter, but you still wish... more 
The $HPPEMIT directive can only appear after the unit header. 
In Delphi, Integer, Longint, and HRESULT are compatible types, but in C++ the types are not compatible and will produce differently mangled C++ parameter names. To ensure that there will not be problems linking object files created with the Delphi compiler this message alerts you to possible problems. If you are compiling your source to an object file, this is an error. Otherwise, it is a warning.  
The symbol is tagged (using the deprecated hint directive) as no longer current and is maintained for compatibility only. You should consider updating your source code to use another symbol, if possible.
The $WARN SYMBOL_DEPRECATED ON/OFF compiler directive turns on or off all warnings about the deprecated directive on symbols in the current unit. 
No further information is available for this error or warning. 
An "experimental" directive has been used on an identifier. "Experimental" indicates the presence of a class or unit which is incomplete or not fully tested. 
The symbol is tagged (using the library hint directive) as one that may not be available in all libraries. If you are likely to use different libraries, it may cause a problem.
The $WARN SYMBOL_LIBRARY ON/OFF compiler directive turns on or off all warnings about the library directive on symbols in the current unit. 
The symbol is tagged (using the platform hint directive) as one that may not be available on all platforms. If you are writing cross-platform applications, it may cause a problem.
The $WARN SYMBOL_PLATFORM ON/OFF compiler directive turns on or off all warnings about the platform directive on symbols in the current unit. 
The given identifier has already been declared in this scope - you are trying to reuse its name for something else.  
The compiler could not find the given identifier - most likely it has been misspelled either at the point of declaration or the point of use. It might be from another unit that has not mentioned a uses clause.  
The compiler found a character that is illegal in Delphi programs.
This error message is caused most often by errors with string constants or comments.  
INDEX, STORED, DEFAULT and NODEFAULT are not allowed in OLE automation sections.  
You have specified a clause in a dispinterface type which is not allowed.  
The clause noted in the message is not allowed in an interface type. Typically this error indicates that an illegal directive has been specified for a property field in the interface.  
<typename> is not an allowed type in an OLE automation section. Only a small subset of all the valid Delphi language types are allowed in automation sections.  
The dispid declared for the original virtual automated procedure declaration must be used by all overriding procedures in derived classes.  
This error message is given if an object file loaded with a $L or $LINK directive contains a reference to a Delphi symbol that is not a procedure, function, variable, typed constant or thread local variable. 
You have specified value for your message index which <= 0.  
The compiler has encountered either $designonly or $runonly in a source file which is not a package. These directives affect the way that the IDE will treat a package file, and therefore can only be contained in package source files. 
Interfaces and records may not contain published sections.
Records may not contain protected sections. 
You can set an imagebase for a DLL to position it in a specific location in memory using the $IMAGEBASE compiler directive. The $IMAGEBASE directive controls the default load address for an application, DLL, or package. The number specified as the imagebase in the directive must be a multiple of 64K (that is, a hex number must have zeros as the last 4 digits), otherwise, it will be rounded down to the nearest multiple, and you will receive this compiler message. 
There are three ways to cause this error: 1. Specify a large enough imagebase that, when compiled, the application code passes the 2GB boundary. 2. Specify an imagebase via the command line which is above 2GB. 3. Specify an imagebase via $imagebase which is above 2GB.
The only solution to this problem is to lower the imagebase address sufficiently so that the entire application will fit below the 2GB limit. 
You have tried to use an index clause with an implements clause. Index specifiers allow several properties to share the same access method while representing different values. The implements directive allows you to delegate implementation of an interface to a property in the implementing class but it cannot take an index specifier. 
An attempt has been made to use a dynamic or message method as a property accessor of a property which has an implements clause.  
An attempt has been made to use a method resolution clause for an interface named in an implements clause.  
The interface definition in this example attempts to use an implements clause which causes the error.  
An attempt has been made to use the implements clause with an improper type. Only class or interface types may be used.  
The compiler has encountered a getter or setter which does not have the correct calling convention.  
An implements clause references an interface which is not mentioned in the interface list of the class.  
The compiler has encountered a "write only" property that claims to implement an interface. A property must be read/write to use the implements clause.  
The unit specified was not named in the contains clause of the package, but a unit which has already been included in the package imports it.
This message will help the programmer avoid violating the rule that a unit may not reside in more than one related package.
Ignoring the warning, will cause the unit to be put into the package. You could also explicitly list the named unit in the contains clause of the package to accomplish the same result and avoid the warning altogether. Or, you could alter the package list to load the named unit from another... more 
If your application is using a Variant type, the compiler includes the Variant unit in the uses clause but warns you that you should add it explicitly. 
Interface used in is not yet completely defined. Forward declared interfaces must be declared in the same type section that they are used in. As an example the following code will not compile because of the above error message:  
This error occurs if there is either a reference to a type that is just being defined, or if there is a forward declared class type in a type section and no final declaration of that type.  
The compiler disallows the use of initialized local variables.  
Variable initialization can only occur when variables are declared individually.  
The compiler does not allow initialization of thread local variables.  
This error message appears when you declare a typed constant or initialized variable of array type, but do not supply the appropriate number of elements.  
CLS-compliant value types cannot have fields that require initialization. See ECMA 335, Partition II, Section 12. 
Type needs initialization - not allowed in variant record. Variant records do not allow types that need initialization in their variant field list since each variant field references the same memory location. As an example, the following code will not compile because the array type needs to be initialized.  
Inline functions can not include an asm block. To avoid this error, remove the inline directive from your function or use Pascal code to express the statements in the asm block. 
Remove the inline directive to prevent this error. 
An inline function cannot be expanded when the inline function body refers to a restricted member that is not accessible where the function is called.
For example, if an inline function refers to a strict private field and this function is called from outside the class (e.g. from a global procedure), the field is not accessible at the call site and the inline function is not expanded.
Note: You can disable these hints by turning off Inlining in Project->Options->Compiling
.  
In order for an inline method to be inserted inline at compile-time, the method must be bound at compile-time. Virtual and dynamic methods are not bound until run-time, so they cannot be inserted inline. Make sure your method is static if you wish it to be inline. 
You can use the inline directive with nested procedures and functions. However, a nested procedure or function that refers to a variable that is local to the outer procedure is not eligible for inlining. 
Inline functions are not expanded between circularly dependent units.
Note: You can disable these hints by turning off Inlining in Project->Options->Compiling
.  
This situation may occur if an inline function refers to a type in a unit that is not explicitly used by the function's unit. For example, this may happen if the function uses inherited to refer to methods inherited from a distant ancestor, and that ancestor's unit is not explicitly specified in the uses list of the function's unit.
If the inline function's code is to be expanded, then the unit that calls the function must explicitly use the unit where the ancestor type is exposed.
Note: You can disable these hints by turning off Inlining in Project->Options->Compiling
.  
This error occurs when an inline function is declared in the interface section and it refers to a symbol that is not visible outside the unit. Expanding the inline function in another unit would require accessing the local symbol from outside the unit, which is not permitted.
To correct this error, move the local symbol declaration to the interface section, or make it an instance variable or class variable of the function's class type. 
No further information is available for this error or warning. 
You have specified an integer constant that requires more than 64 bits to represent.  
Occasionally when compiling an application in Delphi, the compile will halt and display an error message that reads, for example:  
You have attempted to assign an interface to a GUID type, but the interface was not defined with a GUID.  
This indicates that you have forgotten to implement a method required by an interface supported by your class type. 
A method declared in a class which implements an interface is different from the definition which appears in the interface. Probable causes are that a parameter type or return value is declared differently, the method appearing in the class is a message method, the identifier in the class is a field or the identifier in the class is a property, which does not match with the definition in the interface.  
The class specified by name2 has specified the interface name1 more than once in the inheritance section of the class definition.  
This error message is issued for type casts not allowed by the rules. The following kinds of casts are allowed:
  • Ordinal or pointer type to another ordinal or pointer type
  • A character, string, array of character or pchar to a string
  • An ordinal, real, string or variant to a variant
  • A variant to an ordinal, real, string or variant
  • A variable reference to any type of the same size.
Note that casting real types to integer can be performed with the standard functions Trunc and Round.
There are other transfer functions like Ord and Chr that might make your intention... more 
This message occurs if you specify a codepage using the --codepage=nnn command line switch and the codepage you specify is not available on the machine.
See your operating system documentation for details on how to install codepages. 
The $IFDEF, $IFNDEF, $DEFINE and $UNDEF directives require that a symbol follow them.  
This error message means there is an error in a compiler directive or in a command line option. Here are some possible error situations:
  • An external declaration was syntactically incorrect.
  • A command line option or an option in a DCC32.CFG file was not recognized by the compiler or was invalid. For example, '-$M100' is invalid because the minimum stack size must be at least 1024.
  • The compiler found a $XXXXX directive, but could not recognize it. It was probably misspelled.
  • The compiler found a $ELSE or $ENDIF directive, but no preceding $IFDEF, $IFNDEF or $IFOPT directive.
  • (*$IFOPT*) was not followed... more 
Multicast events cannot be assigned to or read from like traditional Delphi read/write events.
Use Include/Exclude to add or remove methods. 
A message procedure can take only one, VAR, parameter; it's type is not checked.  
The object type specified in the "for" clause of a class helper declaration is not a descendent of the object type specified in the "for" clause of the class helper's ancestor type. 
The first statement in a class helper constructor must be "inherited Create;" 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
This error may arise if you attempt to pass a dynamically allocated rectangular array to the Low or High function.
If you receive this error, use a static or ragged (non-rectangular) array. See the Delphi Language Guide for details. 
No further information is available for this error or warning. 
You have attempted to hoist a property to a different visibility level by redeclaration, but <name> in the base class was not declared as a property. -W  
No further information is available for this error or warning. 
The Borland.Delphi.System unit may only be loaded from the Borland.Delphi.dll assembly. This error will occur if Borland.Delphi.System is attempted to be loaded from an alternative assembly. 
The Borland.Delphi.System unit may only be loaded from the Borland.Delphi.dll package. This error will occur if Borland.Delphi.System is attempted to be loaded from an alternative package. 
This error is encountered when a source file has a UCS-4 encoding, as indicated by its Byte-Order-Mark (BOM). The compiler does not support compilation of source files in UCS-4 Unicode encoding. To solve this problem, convert the source file to UCS-2 or UTF-8 encoding. 
No further information is available for this error or warning. 
You have specified a LOOP or JCXZ destination which is out of range. You should not receive this error as the jump range is 2Gb for LOOP and JCXZ instructions. 
This error occurs when you declare a label in the interface part of a unit.  
This error message is given when a label is set on more than one statement.  
You declared and used a label in your program, but the label definition was not encountered in the source code.  
This error message is given when the length of a line in the source file exceeds 255 characters.
Usually, you can divide the long line into two shorter lines.
If you need a really long string constant, you can break it into several pieces on consecutive lines that you concatenate with the '+' operator. 
This error message is issued if you try to assign a local procedure to a procedure variable, or pass it as a procedural parameter.
This is illegal, because the local procedure could then be called even if the enclosing procedure is not active. This situation would cause the program to crash if the local procedure tried to access any variables of the enclosing procedure.  
Thread local variables must be declared at a global scope.  
This message occurs when you are trying to convert strings to Unicode and the string contains characters that are not valid for the current locale. For example, this may occur when converting WideString to AnsiString or if attempting to display Japanese characters in an English locale. 
This error message is given when either the low bound of a subrange type is greater than the high bound, or the low bound of a case label range is greater than the high bound.  
A member that is accessed within the body of an inline method must be accessible anywhere that the inline method is called. Therefore, the member must be at least as visible as the inline method.
Here is an example of code that will raise this error:  
The GUID encountered in the program source is malformed. A GUID must be of the form: 00000000-0000-0000-0000-000000000000. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
The compiler ran out of memory.
This should rarely happen. If it does, make sure your swap file is large enough and that there is still room on the disk. 
This message emits a warning or other text generated using the $MESSAGE directive. 
This error message will be issued in several different situations:
  • Properties in an automated section must use methods for access, they cannot use fields in their read or write clauses.
  • You tried to call a class method with the "ClassType.MethodName" syntax, but "MethodName" was not the name of a method.
  • You tried calling an inherited with the "Inherited MethodName" syntax, but "MethodName" was not the name of a method.
 
Record types that are declared in local scopes or declared in-place in variable declarations can only contain field declarations. For advanced features in record types (such as methods, properties, and nested types), the record type must be an explicitly declared global type. 
During translation of a unit to a C++ header file, the compiler is unable to locate a named symbol which is to be used as a getter or setter for a property. This is usually caused by having nested records in the class and the accessor is a field in the nested record. 
This error message is issued if the compiler does not find a corresponding $ENDIF directive after an $IFDEF, $IFNDEF or $IFOPT directive.  
No further information is available for this error or warning. 
The ancestor of the class being compiled does not have an accessible default constructor. This error only occurs with the byte code version of the compiler. 
This error message appears if there is no operator between two subexpressions, or no semicolon between two statements.
Often, a semicolon is missing on the previous line.  
The package, which is referenced in the message, appears on the package list, either explicitly or through a requires clause of another unit appearing on the package list, but cannot be found by the compiler.
The solution to this problem is to ensure that the DCP file for the named package is in one of the units named in the library path. 
This error message occurs when a call to procedure or function gives less parameters than specified in the procedure or function declaration.
This can also occur for calls to standard procedures or functions.  
This error message is issued when a parameter list gives no type for a value parameter.
Leaving off the type is legal for constant and variable parameters.  
RLINK32 could not be found. Please ensure that it is on the path.
Contact CodeGear if you encounter this error. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
This message is not used in this product. 
The unit name in the top unit is case sensitive and must match the name with respect to upper- and lowercase letters exactly. The unit name is case sensitive only in the unit declaration. 
This error message is given if you either index into an operand that is not an array, or if you pass an argument that is not an array to an open array parameter.  
This error message is output when an expression serves as a condition and must therefore be of Boolean type. This is the case for the controlling expression of the if, while and repeat statements, and for the expression that controls a conditional breakpoint.  
In certain situations the compiler requires a class type:
  • As the ancestor of a class type
  • In the on-clause of a try-except statement
  • As the first argument of a raise statement
  • As the final type of a forward declared class type
 
You were trying to call a normal method by just supplying the class type, not an actual instance.
This is only allowed for class methods and constructors, not normal methods and destructors.  
You have used a class instance variable in an array expression, but the class type has not declared a default array property.  
You have specified an identifier for a read or write clause to a property which is not a field or method.  
When declaring a class helper type with an ancestor clause, the ancestor type must be a class helper. 
No further information is available for this error or warning. 
This error message is only given when the constant expression that specifies the number of characters in a string type is not of type integer.  
A type, which is an interface, was expected but not found. A common cause of this error is the specification of a user-defined type that has not been declared as an interface type.  
This error message occurs if the identifier given in a goto statement or used as a label in inline assembly is not declared as a label.  
This error message is issued if you try to make a call to a method of an ancestor type, but you are in fact not in a method.  
This error is given whenever an object type is expected by the compiler. For instance, the ancestor type of an object must also be an object type.  
This error message is given when the syntax 'Typename.Methodname' is used, but the typename does not refer to an object or class type.  
The compiler has encountered a procedure, which is not marked overload, with the same name as a procedure already marked overload. All overloaded procedures must be marked as such.  
This error message is given when you apply the dereferencing operator '^' to an operand that is not a pointer, and, as a very special case, when the second operand in a 'Raise <exception> at <address>' statement is not a pointer.  
There are two solutions to this problem. You can either remove the attempt at overloading or you can mark the original declaration with the overload directive. The example shown here marks the original declaration.  
You have specified an identifier which does not represent a procedure or function in an EXPORTS clause.  
You need to add a property to your program.
The declaration of a property specifies a name and a type, and includes at least one access specifier. The syntax of a property declaration is:  
The compiler was expecting to find the type name which specified a record, object or class but did not find one.  
You have declared a function, but have not specified a return type.  
No further information is available for this error or warning. 
This error message occurs when you try to take the address of an expression or a constant.  
This error message is issued if you try to apply the standard function TypeOf to an object type that does not have a virtual method table.
A simple workaround is to declare a dummy virtual procedure to force the compiler to generate a VMT.  
The compiler was expecting to find a statement, but instead it found an expression of the specified type.  
Conditional-directive constructions can be nested up to 32 levels deep. 
No further information is available for this error or warning. 
This error message is issued when an identifier given in the parameter list to New is not a constructor.  
The compiler could not locate the configuration files referred to in the source code. 
The compiler has encountered a use of the standard procedure DISPOSE on a dynamic array. Dynamic arrays are reference counted and will automatically free themselves when there are no longer any references to them.  
An attempt has been made to call an overloaded function that cannot be resolved with the current set of overloads.  
To correct this error, either change the arguments so that their types match a version of the array property, or add a new overload of the array property with types that match the arguments. 
An attempt has been made to call an overloaded procedure but no suitable match could be found.  
You have declared a procedure, but given it a result type. Either you really meant to declare a function, or you should delete the result type.  
This warning is displayed if the return value of a function has not been assigned a value on every code path.
To put it another way, the function could execute so that it never assigns anything to the return value.  
You have applied the TypeInfo standard procedure to a type identifier which does not have any run-time type information associated with it.  
You are attempting to create a no-build package which requires an always-build package. Since the interface of an always-build package can change at anytime, and since giving the no-build flag instructs the compiler to assume that a package is up-to-date, each no-build package can only require other packages that are also marked no-build.  
In contrast to standard Pascal, Borland's Delphi language does not allow a goto to jump out of the current procedure.
However, his construct is mainly useful for error handling, and the Delphi language provides a more general and structured mechanism to deal with errors: exception handling.  
The method named in the error message has been declared as an override of a virtual method in a base class, but the visibility in the current class is lower than that used in the base class for the same method.
While the visibility rules of Delphil would seem to indicate that the function cannot be seen, the rules of invoking virtual functions will cause the function to be properly invoked through a virtual call.
Generally, this means that the method of the derived class was declared in a private or protected section while the method of the base class... more 
No further information is available for this error or warning. 
An attempt has been made to change the calling convention of a constructor or destructor from the default calling convention.  
You have specified an illegal calling convention on a method appearing in an 'automated' section of a class declaration.  
A property appearing in a published section has a getter or setter procedure that does not have the correct calling convention.  
No further information is available for this error or warning. 
The $NOINCLUDE directive must be given a known unit name. 
This error message is given when you try to modify a read-only object like a constant, a constant parameter, or the return value of function.  
A for-in statement can only operate on the following collection types:
  • Primitive types that the compiler recognizes, such as arrays, sets or strings
  • Types that implement IEnumerable
  • Types that implement the GetEnumerator pattern as documented in the Delphi Language Guide
Ensure that the specified type meets these requirements. 
The compiler has determined that the specified looping structure will not ever execute, so as an optimization it will remove it. Example:  
Old-style Object types are illegal when compiling to byte code. 
Class or object types must always be declared with an explicit type declaration in a type section - unlike record types, they cannot be anonymous.
The main reason for this is that there would be no way you could declare the methods of that type - after all, there is no type name.  
Class and object cannot be declared local to a procedure.  
Unlike class types, object types can only have static constructors.  
To avoid this error, remove the inline directive or use an explicitly-declared dynamic array type instead of an open array argument. 
String based compiler options such as unit search paths have finite buffer limits.
This message indicates you have exceeded the buffer limit. 
The compiler required an ordinal type at this point. Ordinal types are the predefined types Integer, Char, WideChar, Boolean, and declared enumerated types.
Ordinal types are required in several different situations:
  • The index type of an array must be ordinal.
  • The low and high bounds of a subrange type must be constant expressions of ordinal type.
  • The element type of a set must be an ordinal type.
  • The selection expression of a case statement must be of ordinal type.
  • The first argument to the standard procedures Inc and Dec must be a variable of either ordinal or pointer type.
 
A property has specified an overloaded procedure as either its getter or setter.  
No further information is available for this error or warning. 
You have applied the 'override' directive to a method, but the compiler is unable to find a procedure of the same name in the base class.  
No further information is available for this error or warning. 
You have tried, in a derived class, to override a base method which was not declared as one of the virtual types.  
An error occurred while trying to compile the package named in the message. The only solution to the problem is to correct the error and recompile the package. 
The project you are trying to compile is using two packages which both contain the same unit. It is illegal to have two packages which are used in the same project containing the same unit since this would cause an ambiguity for the compiler.
A main cause of this problem is a poorly defined package set.
The only solution to this problem is to redesign your package hierarchy to remove the ambiguity. 
The package you are compiling requires (either through the requires clause or the package list) another package which already contains the unit specified in the message.
It is an error to have to related packages contain the same unit. The solution to this problem is to remove the unit from one of the packages or to remove the relation between the two packages. 
The compiler can't write the package to disk because the -J option is attempting to create an object file. 
The package referenced in the message was compiled as a never-build package, but it requires another package to which interface changes have been made. The named package cannot be used without recompiling because it was linked with a different interface of the required package.
The only solution to this error is to manually recompile the offending package. Be sure to specify the never-build switch, if it is still desired. 
You have compiled a unit into a package which contains a symbol which does not appear in the interface section of the unit, nor is it referenced by any code in the unit. In effect, this code is dead code and could be removed from the unit without changing the semantics of your program. 
The unit named in the message was not compiled with the $G switch turned on.  
Windows does not support the exporting of threadvar variables from a DLL, but since using packages is meant to be semantically equivalent to compiling a project without them, the Delphi compiler must somehow attempt to support this construct.
This warning is to notify you that you have included a unit which contains a threadvar in an interface into a package. While this is not illegal, you will not be able to access the variable from a unit outside the package.
Attempting to access this variable may appear to succeed, but it actually did not.
A solution to this warning is... more 
When the compiler attempted to load the specified unit from the package, it was found to be corrupt. This problem could be caused by an abnormal termination of the compiler when writing the package file (for example, a power loss). The first recommended action is to delete the offending DCP file and recompile the package. 
The packed keyword is only legal for set, array, record, object, class and file types. In contrast to the 16-bit version of Delphi, packed will affect the layout of record, object and class types.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
This warning indicates that your code is not portable to C++. This is important for component writers who plan to distribute custom components.
In the Delphi language, you can declare a base class with a private member, and a child class in the same unit can refer to the private member. In C++, this construction is not permitted. To fix it, change the child to refer to either a protected member of the base class or a protected member of the child class.
Following is an example of code that would cause this error:  
The symbol referenced appears in a private section of a class, but is never used by the class. It would be more memory efficient if you removed the unused private field from your class definition.  
No further information is available for this error or warning. 
This error message is produced by two different constructs, but in both cases the compiler is expecting to find the keyword 'procedure' or the keyword 'function'.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
It is not allowed to move the visibility of a property into an automated section.  
A property which was declared in a base interface has been overridden in an interface extension.  
No further information is available for this error or warning. 
Record types that are declared in local scopes or declared in-place in variable declarations can only contain field declarations. For advanced features in record types (such as methods, properties, and nested types), the record type must be an explicitly declared global type. 
Dynamic and message methods cannot be used as accessor functions for properties.  
An attempt has been made to access a property through a class reference type. It is not possible to access fields nor properties of a class through a class reference.  
The error is output because the label attribute for g is an empty string.  
In custom attribute declaration syntax, you can pass values to the constructor of the attribute class, followed by name=value pairs, where name is a property or field of the attribute class. 
The property to which you are attempting to assign a value did not specify a 'write' clause, thereby causing it to be a read-only property.  
The property from which you are attempting to read a value did not specify a 'read' clause, thereby causing it to be a write-only property.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
You have attempted to finalize a Pointer type.  
You have attempted to publish a property of type Real, which is not allowed. Published floating point properties must be Single, Double, or Extended.  
The compiler does not allow sets greater than 32 bits to be contained in a published section. The size, in bytes, of a set can be calculated by High(setname) div 8 - Low(setname) div 8 + 1. -$M+  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
This error message occurs if record fields in a typed constant or initialized variable are not initialized in declaration order.  
The $I directive has been used to recursively include another file. You must check to make sure that all include files terminate without having cycles in them. 
An attempt has been made for a unit to use itself.  
When compiling a package, the compiler determined that the package requires itself.  
You have used the syntax of the raise statement which is used to reraise an exception, but the compiler has determined that this reraise has occurred outside of an exception handler block. A limitation of the current exception handling mechanism disallows reraising exceptions from nested exception handlers. for the exception.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
File types are not allowed as function result types.  
The resource linker (RLINK32) has encountered an error while processing a resource file. This error may be caused by any of the following reasons:
  • You have used a duplicate resource name. Rename one of the resources.
  • You have a corrupted resource file. You need to replace it with another version that is not corrupted or remove it.
  • You are using an unsupported resource type, such as a 16-bit resource or form template.
  • If converting resources such as 16-bit icons to 32-bit, the resource linker may have encountered problems.
 
The resource linker (RLINK32) has encountered an error while processing a resource file. A resource linked into the project has the same type and name, or same type and resource ID, as another resource linked into the project. (In Delphi, duplicate resources are ignored with a warning. In Kylix, duplicates cause an error.) 
A 16-bit segment has been found in an object file that was loaded using the $L directive.  
32-bit code no longer uses the segment/offset addressing scheme that 16-bit code used.
In 16-bit versions of Object Pascal, segment/offset pairs were used to declare absolute variables, and as arguments to the Ptr standard function.
Note that absolute addresses should not be used in 32-bit protected mode programs. Instead appropriate Win32 API functions should be called.  
You have placed a ';' directly before an ELSE in an IF-ELSE statement. The reason for this is that the ';' is treated as a statement separator, not a statement terminator - IF-ELSE is one statement, a ';' cannot appear in the middle (unless you use compound statements).  
This error message appears when you try to declare a set type of more than 256 elements. More precisely, the ordinal values of the upper and lower bounds of the base type must be within the range 0..255.  
This message is displayed when you try to use a var parameter in a property setter parameter. The parameter of a property setter procedure cannot be a var or out parameter. 
An attempt has been made to pass an array slice to a fixed size array. Array slices can only be sent to open array parameters. none  
You cannot write back to a slice of an array, so you cannot use the slice standard function to pass an argument that is var or out. If you must modify the array, either pass in the full array or use an array variable to hold the desired part of the full array. 
The $EXTERNALSYM and $NODEFINE directives can only be applied to global symbols. 
A string constant is being assigned to a variable which is not large enough to contain the entire string. The compiler is alerting you to the fact that it is truncating the literal to fit into the variable. -W  
No further information is available for this error or warning. 
This error message occurs when you declare a string type with more than 255 elements, if you assign a string literal of more than 255 characters to a variable of type ShortString, or when you have more than 255 characters in a single character string.
Note that you can construct long string literals spanning more than one line by using the '+' operator to concatenate several string literals.  
No further information is available for this error or warning. 
This warning flags typecasts like PAnsiChar(String) or PChar(AnsiString) which are casting between different string types without character conversion. If the code generating this warning calls a Win32 API routine, be sure that you use the wide version of the Win32 API routine when passing a String parameter:  
An attempt has been made to use one of the reserved unit names, such as System, as the name of a user-created unit.
The names in the following list are currently reserved by the compiler.  
The compiler has encounter an expression in your source code that is too complicated for it to handle.
Reduce the complexity of your expression by introducing some temporary variables. 
One or more of your procedures contain so many string constant expressions that they exceed the compiler's internal storage limit. This can occur in code that is automatically generated. To fix this, you can shorten your procedures or declare contant identifiers instead of using so many literals in the code. 
You have exceeded the memory allocated to conditional symbols defined on the command line (including configuration files). There are 256 bytes allocated for all the conditional symbols. Each conditional symbol requires 1 extra byte when stored in conditional symbol area.
The only solution is to reduce the number of conditional compilation symbols contained on the command line (or in configuration files). 
The compiler has surpassed the maximum number of errors which can occur in a single compilation.
The only solution is to address some of the errors and recompile the project. 
This error message occurs when a procedure or function call gives more parameters than the procedure or function declaration specifies.
Additionally, this error message occurs when an OLE automation call has too many (more than 255), or too many named parameters.  
Record types that are declared in local scopes or declared in-place in variable declarations can only contain field declarations. For advanced features in record types (such as methods, properties, and nested types), the record type must be an explicitly declared global type. 
This error message occurs when the compiler expected the name of a type, but the name it found did not stand for a type.  
You have attempted to use the standard procedure Finalize on a type that requires no finalization.  
You have specified a data type which is too large for the compiler to represent. The compiler will generate this error for datatypes which are greater or equal to 2 GB in size. You must decrease the size of the description of the type.  
This error message is reserved. 
You added a 'PUBLISHED' section to a class that was not compiled while the {$M+}/{$TYPEINFO ON} switch was in effect, or without deriving from a class compiled with the {$M+}/{$TYPEINFO ON} switch in effect.
The TypeInfo standard procedure requires a type identifier as its parameter. In the code above, 'NotType' does not represent a type identifier.
To avoid this error, ensure that you compile while the {$M+}/{$TYPEINFO ON} switch is on, or derive from a class that was compiled with {$M+}/{$TYPEINFO ON} switch on. 
You have attempted to obtain type information for an identifier which does not represent a type.  
The compiler believes you are attempting to hoist a property to a different visibility level in a derived class, but the specified property does not exist in the base class.  
The VCL Run-Time Type Information (RTTI) subsystem and the streaming of DFM files require that published symbols are non-Unicode (ANSI) characters. Consider whether this symbol needs to be published, and if so, use ANSI characters instead of Unicode. 
This message occurs when you are trying to convert strings in Unicode to your local character set and the string contains characters that are not valid for the current locale. For example, this may occur when converting WideString to AnsiString or if attempting to display Japanese characters in an English locale. 
The unit is deprecated, but continues to be available to support backward compatibility.
The unit is tagged (using the deprecated hint directive) as no longer current and is maintained for compatibility only. You should consider updating your source code to use another unit, if possible.
The $WARN UNIT_DEPRECATED ON/OFF compiler directive turns on or off all warnings about the deprecated directive in units where the deprecated directive is specified. 
An "experimental" directive has been used on an identifier. "Experimental" indicates the presence of a class or unit which is incomplete or not fully tested. 
This error occurs when a compiled unit file (.dcu file) has a bad format.
Most likely, the file has been corrupted. Recompile the file if you have the source. If the problem persists, you may have to reinstall Delphi. 
The whole unit is tagged (using the library hint directive) as one that may not be available in all libraries. If you are likely to use different libraries, it may cause a problem.
The $WARN UNIT_LIBRARY ON/OFF compiler directive turns on or off all warnings in units where the library directive is specified. 
The unit name in the top unit is case sensitive and must match the name with respect to upper- and lowercase letters exactly. The unit name is case sensitive only in the unit declaration. 
The whole unit is tagged (using the platform hint directive) as one that contains material that may not be available on all platforms. If you are writing cross-platform applications, it may cause a problem. For example, a unit that uses objects defined in OleAuto might be tagged using the PLATFORM directive
The $WARN UNIT_PLATFORM ON/OFF compiler directive turns on or off all warnings about the platform directive in units where the platform directive is specified. 
This error message appears when the compiler encounters an unknown directive in a procedure or function declaration.
The directive is probably misspelled, or a semicolon is missing.  
No further information is available for this error or warning. 
No further information is available for this error or warning. 
You are trying to link object modules into your program with the $L compiler directive. However, the object file is too complex for the compiler to handle. For example, you may be trying to link in a C++ object file. This is not supported. 
No further information is available for this error or warning. 
Private types in an assembly are not imported and are marked as having an unreliable size. If a record is declared as having at least one private field or it has one field whose type size is unreliable then this error will occur. 
You have attempted to follow named OLE Automation arguments with unnamed arguments.  
A custom attribute declaration was not followed by a symbol declaration such as a type, variable, method, or parameter declaration. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
No further information is available for this error or warning. 
You are attempting to translate a Delphi unit to a C++ header file which contains unsupported language features.
You must remove the offending construct from the interface section before the unit can be translated. 
This error occurs when you open a comment, but do not close it.
Note that a comment started with '{' must be closed with '}', and a comment started with '(*' must be closed with '*)'.  
For every {$IFxxx}, the corresponding {$ENDIF} or {$IFEND} must be found within the same source file. This message indicates that you do not have an equal number of ending directives.
This error message is reported at the source line of the last $IF/$IFDEF/etc. with no matching $ENDIF/$IFEND. This gives you a good place to start looking for the source of the problem. 
The compiler did not find a closing apostrophe at the end of a character string.
Note that character strings cannot be continued onto the next line - however, you can use the '+' operator to concatenate two character strings on separate lines.  
You have declared a variable in a procedure, but you never actually use it. -H  
This warning is given if a variable has not been assigned a value on every code path leading to a point where it is used.  
The Delphi String type does not store the length of the string in element 0. The old method of changing, or getting, the length of a string by accessing element 0 does not work with long strings.  
The program has attempted to use the standard procedure NEW on a dynamic array. The proper method for allocating dynamic arrays is to use the standard procedure SetLength.  
The unit named in the error is a package unit and as such cannot be included in your project. A possible cause of this error is that somehow a Delphi unit and a package unit have been given the same name. The compiler is finding the package unit on its search path before it can locate a same-named Delphi file. Packages cannot be included in a project by inclusion of the package unit in the uses clause. 
This fatal error is given when a unit used by another could not be compiled. In this case, the compiler gives up compilation of the dependent unit because it is likely very many errors will be encountered as a consequence. 
This message is currently unused. 
You pressed Ctrl-Break during a compile. 
You have tried to view a value that is not accessible from within the integrated debugger. Certain types of values, such as a 0 length Variant-type string, cannot be viewed within the debugger. 
The compiler gives this hint message if the value assigned to a variable is not used. If optimization is enabled, the assignment is eliminated.
This can happen because either the variable is not used anymore, or because it is reassigned before it is used.  
This error message is issued if you try to declare an absolute variable, but the absolute directive is not followed by an integer constant or a variable name.  
The evaluator or watch statement is attempting to retrieve the value of <name>, but the compiler was able to determine that the variables actual lifetime ended prior to this inspection point. This error will often occur if the compiler determines a local variable is assigned a value that is not used beyond a specific point in the program's control flow.  
For a variable parameter, the actual argument must be of the exact type of the formal parameter.  
This message indicates that you are trying to implement a varargs routine. You cannot implement varargs routines, you can only call external varargs. 
This fatal error occurs when the declaration of symbol declared in the interface part of a unit has changed, and the compiler cannot recompile a unit that relies on this declaration because the source is not available to it.
There are several possible solutions - recompile Unit1 (assuming you have the source code available), use an older version of Unit2 or change Unit2, or get a new version of Unit1 from whoever has the source code.
This error can also occur when a unit in your project has the same name as a standard Delphi unit.
For example, this may... more 
No further information is available for this error or warning. 
The System type Void is not allowed to be used in some contexts. As an example, the following code demostrates the contexts where type Void may not be used.  
A unit which has been flagged with the $weakpackageunit directive cannot contain initialization or finalization code, nor can it contain global data. The reason for this is that multiple copies of the same weakly packaged units can appear in an application, and then referring to the data for that unit becomes and ambiguous proposition. This ambiguity is furthered when dynamically loaded packages are used in your applications.  
A unit which was marked with $WEAKPACKAGEUNIT is being placed into a package, but it contains global data. It is not legal for such a unit to contain global data or initialization or finalization code.
The only solutions to this problem are to remove the $WEAKPACKAGEUNIT mark, or remove the global data from the unit before it is put into the package. 
"Set of char" in Win32 defines a set over the entire range of the Char type. Since Char is a byte-sized type in Win32, this defines a set of maximum size containing 256 elements. In .NET, Char is a word-sized type, and this range (0..65535) exceeds the capacity of the set type.
To accomodate existing code that uses this "Set of Char" syntax, the compiler will treat the expression as "set of AnsiChar". The warning message reminds you that the set can only store the boolean state of 256 distinct elements, not the full range of the Char type. 
The internal consistency check performed on the RLINK32.DLL file has failed.
Contact CodeGear if you encounter this error. 
This error message is given whenever an operator cannot be applied to the operands it was given - for instance if a boolean operator is applied to a pointer.  
This warning message occurs when the XML has a cref attribute that cannot be resolved.
This is a warning in XML documentation processing. The XML is well formed, but the comment's meaning is questionable. XML cref references follow the .NET style. See http://msdn2.microsoft.com/en-us/library/acd0tfbe.aspx for more details. A documentation warning does not prevent building. 
This warning message occurs when the expected character was not found in the XML.
This is an error in XML documentation processing. The XML is not well formed. This is a warning because a documentation error does not prevent building. 
This warning message occurs when a name in XML contains an invalid character.
This is an error in XML documentation processing. The XML is not well formed. This is a warning because a documentation error does not prevent building. 
This warning message occurs when an XML name was started with an invalid character.
This is an error in XML documentation processing. The XML is not well formed. This is a warning because a documentation error does not prevent building. 
This warning message occurs when an XML Parameter has no matching param tag in the XML comment but other parameters do.
This is a warning in XML documentation processing. There is at least one tag, but some parameters in the method don't have a tag. A documentation warning does not prevent building. 
This warning message occurs when the XML contains a parameter tag for a nonexistent parameter.
This is a warning in XML documentation processing. The XML is well formed, however, a tag was created for a parameter that doesn't exist in a method. A documentation warning does not prevent building. 
This warning message occurs when XML references an undefined entity.
This is an error in XML documentation processing. The XML is not well formed. This is a warning because a documentation error does not prevent building. 
This warning message occurs when the compiler encounters white space in a location in which white space is not allowed.
This is an error in XML documentation processing. The XML is not well formed. This is a warning because a documentation error does not prevent building. 
The Delphi compiler now allows the constant 0 to be used in pointer expressions in place of NIL. This change was made to allow older code to still compile with changes which were made in the low-level RTL.  
Emitted when the compiler detects a case where the programmer is explicitly casting an AnsiString(or AnsiChar) to some form of Unicode (UnicodeString or WideString). This warning is off by default and should only be used to locate potential problems. 
Emitted when the compiler detects a case where the programmer is explicitly casting some form of Unicode (UnicodeString or WideString) down to AnsiString (or AnsiChar). This is a potential “lossy” conversion since there may be characters in the string that cannot be represented in the code page to which the string will be converted. This warning is off by default and should only be used to locate potential problems. 
Emitted when the compiler detects a case where it must implicitly convert an AnsiString (or AnsiChar) to some form of Unicode (a UnicodeString or a WideString). This warning is on by default.
To avoid this warning, you need to explicitly typecast your AnsiString to the new string type (UnicodeString), as follows:  
Emitted when the compiler detects a case were it must implicitly convert a form of Unicode (a UnicodeString or a WideString) to an AnsiString (or AnsiChar). This is a potentially lossy conversion, since there may be characters in the string that cannot be represented in the code page to which the string will be converted. This warning is on by default.
If you are certain that the data loss mentioned above will not happen, you can avoid this warning. To do this, cast the right operand to the left operand’s type manually. Generally, avoid assigning one string type to another.... more 
Some characters in an AnsiChar constant might not be represented in Unicode. Data can be lost with assignments and typecasts involving MBCS characters and strings where one AnsiChar might represent only a portion of a letter. 
Any character in a WideString constant with ordinal value greater than 127 may be replaced with "?" if the WideChar is not representable in the current locale codepage. 
Some characters in an AnsiString constant might not be represented in Unicode. Data can be lost with assignments and typecasts involving MBCS characters and strings where one AnsiChar might represent only a portion of a letter. 
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
What do you think about this topic? Send feedback!