Compiler Error Messages
Compiler Errors List
See Also: Finding Specific Errors
List of Errors
- File Not Found
- MEMORY: 'amount_memory_available'
- Internal error: Compiler output message is corrupt, Compiler terminated unexpectedly
- 10 - Out of Memory
- 16 - Please enter a valid date
- 36 - Too many resident images for memory
- 50 - Internal Expression Error
- 54 - Invalid Symbol in Expression
- 55 - Invalid Data Type in Expression
- 57 - Out Of Expression Stack
- 58 - Over 25 Parentheses () in Expression
- 59 - Floating Point Exception Error
- 95 - Argument Type Not Legal In Entry Command
- 100 - Maximum Number Of Message/Property Definitions Exceeded
- 100 - Procedures And Functions May .Not. Be Nested
- 101 - Global Functions Cannot Be Registered
- 101 - Global Procedures Cannot Be Registered
- 101 - Missing Keyword Returns On Function Declaration
- 101 - Number Expected
- 4294 - Can't close .exe
- 4295 - Can't include resource
- 4296 - Can't read .FLP
- 4297 - Can't replace to self
- 4298 - Command not found
- 4299 - Constant expected
- 4300 - Duplicate page name
- 4301 - Duplicate resource name
- 4302 - ELSE without IF
- 4303 - Empty label
- 4304 - ENDHEADER not found
- 4305 - FLEXCFL not found
- 4306 - Forward reference not resolved
- 4307 - Hash index bad
- 4308 - Illegal macro expansion
- 4309 - Illegal redefinition
- 4310 - Illegal return type
- 4311 - Image not found
- 4312 - Invalid flexkey name
- 4313 - Include file not found on Line: of File:
- 4314 - Indicator unresolved
- 4315 - Invalid data type
- 4316 - Invalid resource option
- 4317 - Invalid type
- 4318 - Line number wrong
- 4319 - Macro buffer exceeded
- 4320 - Missing argument
- 4321 - Missing END_CLASS
- 4322 - Missing END_MESSAGE
- 4323 - Missing END_OBJECT
- 4324 - No active conditionals
- 4325 - Number expected
- 4326 - Pop past beginning of stack
- 4327 - Region size exceeded
- 4328 - Undefined symbol in argument
- 4329 - Replace array corrupted
- 4330 - Reserved word used
- 4331 - Source not compatible
- 4332 - Symbol already defined
- 4333 - Too many commands
- 4334 - Too many Ifs
- 4335 - Too many indicators
- 4336 - Too many integers
- 4337 - Too many lines
- 4338 - Too many mask fill chars
- 4339 - Too many messages
- 4340 - Too many nested blocks
- 4341 - Too many pages
- 4342 - Too many stack levels
- 4343 - String too long
- 4344 - Too many windows
- 4345 - Type check error
- 4346 - Unequal parentheses
- 4347 - Unknown command
- 4348 - Unresolved control block
- 4349 - Window already formatted
- 4350 - Window already typed
- 4351 - Writing output
- 4352 - Undefined symbol in GROUP
- 4353 - Undefined symbol in ENTRY
- 4366 - Cannot Create Overloaded Name
- 4390 - Illegal method name definition
- 4391 - Illegal code placement
- 4392 - Invalid method syntax
- 4393 - Invalid message syntax
- 4394 - Invalid object reference
- 4394 - Invalid object reference OBJECT .NOT. YET DEFINED
- 4395 - Obsolete command is unsupported
- 4396 - Invalid argument
- 4397 - Illegal external function definition
- 4501 - Incompatible Debug Information
- 4507 - Missing Array Indexer in Reference
- 4514 - Obsolete or Ambiguous Syntax
- 4531 - Obsolete String Command
- 4532 - Obsolete Type Command
- 4533 - Obsolete Command
- 4534 - Obsolete Global Function
- 4535 - Obsolete Technique
- 4536 - Obsolete Package
- 4537 - Obsolete Class
- 4538 - Obsolete Indicator Use
- 4539 - Illegal Type Conversion
- 4540 - Obsolete Global Object Function
Error Details
File Not Found
Cause
A file cannot be found.
Resolution
Check the disk folder for the correct file name. This is a compiler initialization error.
MEMORY: 'amount_memory_available'
Cause
Warning: updated every time a new symbol is encountered if remaining memory is less than one kilobyte. Displays the amount of memory remaining available.
Resolution
If "Out of Memory" error is declared, see Compiler Option M for possible fix. This is a macro compilation error.
Internal error: Compiler output message is corrupt, Compiler terminated unexpectedly
Cause
This can be caused by a code (or similar command/function) statement that exceeds the maximum line length of 4095 characters.
Resolution
Reduce the length of the line of code by splitting it up into multiple separate statements.
10 - Out of Memory
Cause
Not enough physical random access memory (RAM) available.
Resolution
Free up more memory (RAM). This is a compiler initialization error.
16 - Please enter a valid date
Cause
A date was coded into DataFlex source code that is invalid in U.S. date format.
Resolution
All dates coded into DataFlex source code must be in valid U.S. date format.
Example
Incorrect Code:
Date dToday
If (dToday <= 31/08/2003) Begin
// more code
end
Correct Code:
Date dToday
If (dToday <= 08/31/2003) Begin
// more code
end
36 - Too many resident images for memory
Cause
This should only occur in legacy code using images, such as a BasicReport. Image windows in your program consume memory. Images with the resident option consume an amount of memory equal to their actual size in bytes (up to about 2,000 each).
Resolution
Reduce the number of resident images in your application (consider separating it into multiple programs), the number of images using the resident option, and/or the size of such images.
50 - Internal Expression Error
Cause
A mathematical expression could not be typed. This problem is most likely generated by an improper compilation, and can often be fixed by recompiling the source code. This is a command compilation error.
Resolution
Recompile your application.
54 - Invalid Symbol in Expression
Cause
- An expression names a variable which has not been declared.
- An incorrect or nonsensical (impossible to evaluate) expression.
- Calling messages in a COM (ActiveX) control before the Windows message queue has started (before Start_UI). This is a command compilation error.
Resolution
- Declare all variables before use.
- Fix the incorrect expression.
Example
Incorrect Code:
Integer i1 i2 i3
Move (i1 +* i2) to i3
Send Info_Box i3 "Done"
Correct Code:
Integer i1 i2 i3
Move (i1 + i2) to i3
Send Info_Box i3 "Done"
The example in the incorrect code is most likely the result of a typo, and the programmer intended to either add or multiply the integer variables i1 and i2.
- COM events may not work properly until you have started the Windows message queue. This is because Windows internally uses the message queue to synchronize inter-thread communication in COM. Do not send messages to COM controls until the Windows message queue has started (after Start_UI has executed).
55 - Invalid Data Type in Expression
This is a command compilation error.
Cause
Certain data types (window names without parentheses around them, labels) are not allowed in expressions. This error reports the presence of such terms in expressions.
Resolution
Remove the invalid data types from your expression. In many cases, you can get the value of the illegal data type you are trying to use to a variable and then use the variable in an expression. Update your code to proper object-oriented code using methods and objects, which will remove the need for the use of labels.
57 - Out Of Expression Stack
Cause
The compiler maintains a "stack" which it uses to type all expressions. Too many terms and/or too many terms of different types in an expression can trigger this error. This is a command compilation error.
Resolution
To overcome this error, "build up" your final expression through two or more actual lines of code (commands).
58 - Over 25 Parentheses () in Expression
Cause
More than 25 pairs of parentheses are used in one expression. This is a command compilation error.
Resolution
Split up your final expression into 2 or more actual lines of code. Most likely, a line of code containing 25 or more pairs of parentheses is difficult to read and debug, so splitting up such complex code will improve readability and maintainability of the code as well as resolve this error.
59 - Floating Point Exception Error
Cause
An expression evaluates to a value outside the range of real numbers. This is a command compilation error.
Resolution
Do not evaluate expressions that exceed the range of real numbers (1 times 10 to the 306 power).
95 - Argument Type Not Legal In Entry Command
Cause
An illegal type of argument for the entry command was used, such as a constant, variable, label, or table name. This is a macro compilation error.
Resolution
Only use legal types of arguments for the entry (database fields, expressions, options, and image windows).
100 - Maximum Number Of Message/Property Definitions Exceeded
Cause
The number of message and property definitions in a single program has been exceeded.
Resolution
Reduce your line program so that the number of message and property definitions remains within the limit. Split up your program into separate smaller programs.
100 - Procedures And Functions May .Not. Be Nested
Cause
An End_Procedure or End_Function statement is located inside a method. This is a command compilation error.
Resolution
Methods (procedures and functions) cannot be defined inside other methods. Move the method declaration outside of any other methods.
101 - Global Functions Cannot Be Registered
Cause
Attempt to register a global function.
Resolution
It is unnecessary and illegal to register global functions. This error can also point out that you have created a function with the same name as an existing global function.
101 - Global Procedures Cannot Be Registered
Cause
Attempt to register a global procedure.
Resolution
It is unnecessary and illegal to register global procedures. This error can also point out that you have created a procedure with the same name as an existing global procedure.
101 - Missing Keyword Returns On Function Declaration
Cause
Missing Returns keyword on function declaration.
Resolution
Add the missing Returns keyword to the function declaration.
Example
Incorrect Code:
Function Foo
Integer iVoid
Function_Return iVoid
End_Function // Foo
Correct Code:
Function Foo
Returns Integer
Integer iVoid
Function_Return iVoid
End_Function // Foo
101 - Number Expected
This is a command compilation error.
Cause
A numeric expected but not found. ICODE error in the command sequence.
Resolution
Change the non-numeric identifier used to a numeric one.
4294 - Can't close .exe
4295 - Can't include resource
4296 - Can't read .FLP
4297 - Can't replace to self
Cause
This error means that you are using an identifier or symbol that is already defined previously.
Resolution
Rename the identifier in question to use a unique name.
4298 - Command not found
Cause
- A command in the source file (symbol_name) is not present in the DataFlex included command set, the program, and its packages.
- Misspellings frequently trigger this error.
- The file Flex.cfl is not accessible to the compiler.
- An incorrectly coded expression.
Resolution
- Check to make sure you are including the source code file that contains the command named as using a Use or #INCLUDE statement. The online help topic for the command will tell you which file to include.
- Check the spelling of the command.
- Make sure Flex.cfl is in the Lib subfolder where DataFlex is installed and nowhere else. Make sure that an outdated version (from a prior version of DataFlex) of Flex.cfl is not found elsewhere (e.g. one of the subfolders of your workspace).
-
Check the expression that is triggering this error.
a. A missing closing parenthesis for an expression.
Example of Incorrect Code:
Integer i1 i2 i3 If (i1 = i2) AND (i1 = i3) ShowLn "condition is true"Example of Correct Code:
Integer i1 i2 i3 If ((i1 = i2) AND (i1 = i3)) ShowLn "condition is true"The incorrect code will trigger compiler error 4298, because the entire expression is not enclosed in parentheses.
b. A missing space between a command and the first argument for the command.
Example of Incorrect Code:
Move(Customer.Sales * 10) To Customer.SalesExample of Correct Code:
Move (Customer.Sales * 10) To Customer.Sales
4299 - Constant expected
4300 - Duplicate page name
4301 - Duplicate resource name
4302 - ELSE without IF
This is a macro-compilation error.
Cause
A #ELSE appears in a macro without a #IF... being open.
Resolution
Add a matching #IF for the #ELSE.
4303 - Empty label
4304 - ENDHEADER not found
4305 - FLEXCFL not found
4306 - Forward reference not resolved
Cause
You used the name of a message not defined anywhere in the object or its class heritage in which the message was invoked.
Resolution
Check spelling of method calls and method names. Ensure the object is inside your current object neighborhood or declared outside of an object neighborhood prior to the current line of code. If the method is declared after this line of code, add a Register_Procedure or Register_Function statement to resolve this compiler error (make sure the method really exists before doing this, or you will get runtime errors later).
4307 - Hash index bad
4308 - Illegal macro expansion
4309 - Illegal redefinition
4310 - Illegal return type
4311 - Image not found
Cause
- The image being referenced was not included in the program's source code or not referenced prior to this point in the code.
- Illegal characters in image name.
- Spaces to the left of the image name.
This should only occur in legacy code using images, such as a BasicReport.
Resolution
- Verify that the image being referenced is located in the source code prior to the place it is being referenced. Check the SourceFileName.PRN file to see if and where the image is included in the program.
- Only use legal ASCII characters (letters and numbers) in image names. Do not use spaces in image names.
- The DataFlex Studio sometimes indents the source code of the report, resulting in this error message. As a solution to this, place the report in a separate source code file and #INCLUDE the file in the place where the report was in the Studio.
4312 - Invalid flexkey name
Cause
An On_Key statement is referencing an invalid accelerator key.
Resolution
FlexKeys are predefined DataFlex accelerator keys. An On_Key statement must reference a valid FlexKey name or a valid keyboard key combination. You can see a list of DataFlex accelerator keys here.
4313 - Include file not found on Line: of File:
Cause
The file specified for inclusion into the program by a Use or #INCLUDE statement on the line of code listed cannot be found along the MakePath.
Resolution
This error sometimes occurs if a filename is misspelled.
4314 - Indicator unresolved
Cause
An indicator is being evaluated that is not declared.
Resolution
Verify that you have declared the indicator prior to using it. Check the spelling of the indicator.
4315 - Invalid data type
Cause
Bad/undefined parameter type name used.
Resolution
The parameter data type listed is undefined.
Example
Incorrect Code:
Procedure Test Integer arg1 MyDataType arg2
where MyDataType is not defined. This is typically caused by a typo of a valid data type or attempting to reference a data type before it has been defined.
4316 - Invalid resource option
4317 - Invalid type
Cause
"One or both comparison variable datatypes are not valid for logical evaluation. Use (var<>xx)" on Line: of File:
Resolution
For Boolean comparisons, you should use the appropriate relational operator inside a Boolean expression and enclose it in parentheses.
Example
This is obsolete:
If iCount GE 10
This is correct:
If (iCount >= 10)
4318 - Line number wrong
Cause
This error can be caused by compiling a corrupted or outdated (from a previous version) precompiled package or header.
Resolution
Re-precompile all header files by selecting Precompile All Packages from the Tools menu of the Studio. Recompile your application. If the error subsists, check the subfolders of your workspace for precompiled copies of windows.pkg (windows.fld & windows.pkd) and dfallent.pkg (dfallent.fld & dfallent.pkd). If you find any, rename them, then recompile your application.
4319 - Macro buffer exceeded
Cause
- The size of the buffer for a single macro has been exceeded or too many commands are nested.
- Some coding error, such as a missing #EndCommand or missing #END.
Resolution
- Split the command into smaller pieces of code or nest fewer levels.
- Correct the coding error.
4320 - Missing argument
4321 - Missing END_CLASS
Cause
A class is missing its End_Class statement somewhere in the compiled code preceding the line that triggers the error.
Resolution
Add an End_Class statement to declare the end of the class code. The tricky part of this error is that it most likely will not be reported until the last line of the code, since that is when all Class and End_Class statements have been resolved. The usually simplest way of finding the actual place in the code where the End_Class statement is missing is to return to the last place(s) that were edited.
Example
Incorrect Code:
Object oArray1 is a Button
Procedure Construct_Object
Forward Send Construct_Object
End_Procedure
Correct Code:
Object oArray1 is a Button
Procedure Construct_Object
Forward Send Construct_Object
End_Procedure // Construct_Object
End_Class
4322 - Missing END_MESSAGE
4323 - Missing END_OBJECT
Cause
- An object is missing its End_Object statement somewhere in the compiled code preceding the line that triggers the error.
- This error can also be triggered by a missing End_Class statement.
Resolution
-
Add an End_Object statement to declare the end of the objects code. The tricky part of this error is that it most likely will not be reported until the last line of the code, since that is when all Object and End_Object statements have been resolved. The usually simplest way of finding the actual place in the code where the End_Object statement is missing is to return to the last place(s) that were edited.
Example of Incorrect Code:
Object oButton1 is a ButtonExample of Correct Code:
Object oButton1 is a Button End_Object // oButton1 -
Add an End_Class statement to declare the end of the class code.
Example of Incorrect Code:
Object oArray1 is a Button Procedure Construct_Object Forward Send Construct_Object End_ProcedureExample of Correct Code:
Object oArray1 is a Button Procedure Construct_Object Forward Send Construct_Object End_Procedure End_Class
4324 - No active conditionals
This is a macro-compilation error.
Cause
This error can be triggered by an unbalanced #ENDIF.
Resolution
Make sure the #IF and #ENDIF statements in your code are balanced (matching sets).
Example
Incorrect Code:
#IF 0
...
#ENDIF
...
#ENDIF // Error 4324
Correct Code:
#IF 0
...
#ENDIF
4325 - Number expected
4326 - Pop past beginning of stack
4327 - Region size exceeded Data Area on Line:of File:
Cause
This occurs if the size of the data area is exceeded. The data area in a DataFlex program is limited to 8 MB. Typically, this means that the program contains lots of huge string literals or other constant data. String literals are anything enclosed in quotes.
Resolution
Check if the program may have an unusually large sets of string literals and/or excessively long string literals, which, when combined, exceed 8 MB.
4328 - Undefined symbol in argument
Cause
This error is usually caused by the declaration of an object as an instance of a class that has not been included in the source code before the object declaration.
Resolution
Include the Use statement for the class specified by
Example
Incorrect Code:
Object Cust_DD is a Customer_DataDictionary
End_Object
Correct Code:
// include the source code file that defines class Customer_DataDictionary
Use Customer.DD
Object Cust_DD is a Customer_DataDictionary
End_Object
In order not to trigger error 4328, the source code file that defines that class used must be included in the application that will be compiled.
4329 - Replace array corrupted
4330 - Reserved word used
4331 - Source not compatible
4332 - Symbol already defined
Cause
- A function or procedure with the same name is already defined as a global function or procedure.
- A function or procedure with the same name is already defined as an external_function or external_procedure.
- A reserved word is used as an identifier (e.g. variable name, property name, object name).
- An internal function name is used as an identifier (e.g. function or procedure name).
Resolution
- & 2. Rename one of the functions to resolve the duplication.
- Rename the identifier so it no longer conflicts with the reserved word.
- Rename the identifier so it no longer conflicts with the internal function.
Use Hungarian notation for naming identifiers as discussed in the Naming Conventions section of the help.
4333 - Too many commands
4334 - Too many Ifs
4335 - Too many indicators
4336 - Too many integers
4337 - Too many lines
Cause
A single continuous code statement has exceeded the allowed maximum number of characters.
Resolution
A single continuous compilable statement can consist of numerous lines of code of up to 255 characters each, continued from one line to the next using the semicolon (;) character.
Example
ShowLn ("This is a test of a continuous compilable statement made up " ;
+"of several lines of code. " ;
+"This is the third and last line of this example.")
4338 - Too many mask fill chars
4339 - Too many messages
4340 - Too many nested blocks
Cause
This error is triggered when the maximum number of nested control blocks has been exceeded. Control blocks are created by begin, repeat, and while commands, format commands using the range= option, and structured control commands, etc.
Resolution
The maximum number of control blocks which may be open is 30. Reduce the number of nested control blocks to be below the limit. This can sometimes be achieved by splitting complex code up into individual methods.
4341 - Too many pages
4342 - Too many stack levels
Cause
This error is triggered when the maximum number of stack levels has been exceeded. Stack levels are created by control blocks, among other things. Control blocks are created by begin, repeat, and while commands, format commands using the range= option, and structured control commands, etc.
Resolution
The maximum number of stack levels which may be open is 30. Reduce the number of stack levels to be below the limit. This can sometimes be achieved by splitting complex code up into individual methods.
4343 - String too long
4344 - Too many windows
4345 - Type check error
Cause
- Trying to assign the wrong data type to a variable.
- Attempting to assign a value into a constant.
- Calling a function without specifying a variable to accept the function's return argument.
- Attempting to declare a global variable declaration that specifies the length of a string in a method.
- U_ClassName.
Resolution
-
Only move data to a variable that is the same type as the variable. In some cases, DataFlex will automatically convert the data to the new type without generating an error. Use this technique sparingly. In those cases, be very sure that the resulting value can only become what you expect it to be. Do thorough testing of this type of conversion.
-
You cannot assign a value to a constant. Use a variable instead of a constant.
Example:
move sName to "Fred"
- Specifying a variable to accept the function's return argument.
Example:
Function Foo returns Integer
Function_Return iVoid
End_Function
Procedure Goo
Get Foo
End_Procedure
The above code does not specify a variable to hold Foo's return argument. This is the corrected code:
Function Foo returns Integer
Integer iVoid
Function_Return iVoid
End_Function
Procedure Goo
Integer iRetVal
Get Foo to iRetVal
End_Procedure
- Only global variable declarations can specify the size (length) of a string variable. Local variables are always the size specified by the global argument size. Any variable declared inside a method is automatically a local variable. Either:
a. Remove the size specification and leave the variable in the method, changing the global variable a local variable.
b. Move the global variable declaration outside any method.
c. Replace the global variable with a property, as proper object-oriented programming technique suggests.
- The class ClassName has not been defined in the code compiled so far.
4346 - Unequal parentheses
Cause
The number of opening and closing parentheses in an expression is not equal.
Resolution
Correct the expression to ensure the number of opening and closing parentheses is identical.
Example
Incorrect Code:
Integer i1 i2 i3
If ((i1 = i2) AND (i1 = i3) showln "condition is true"
The code above is missing a closing parenthesis at end of the expression:
Correct Code:
Integer i1 i2 i3
If ((i1 = i2) AND (i1 = i3)) showln "condition is true"
4347 - Unknown command
Cause
- A command in the source file (symbol_name) is not present in the DataFlex included command set, the program, and its packages.
- Misspellings frequently trigger this error.
- The file Flex.cfl is not accessible to the compiler.
Resolution
-
Check to make sure you are including the source code file that contains the command named as
using a Use or #INCLUDE statement. The online help topic for the command will tell you which file to include. -
Check the spelling of the command.
-
Make sure Flex.cfl is in the Lib subfolder where DataFlex is installed and nowhere else. Make sure that an outdated version (from a prior version of DataFlex) of Flex.cfl is not found elsewhere (e.g. one of the subfolders of your workspace).
4348 - Unresolved control block
Cause
If you used a begin, for ... from ... to, repeat, or while command without a terminating end, loop, or until command, this error will be triggered. Review closure of control blocks in your source code. This is a command compilation error.
Resolution
Control blocks must exist in matching pairs. Verify that each control block's beginning has a matching ending statement. This can get complex due to control blocks being nested inside other control blocks. A simple method of making this easier to track down is to always indent control blocks, including nested object control blocks, so that matching beginning and ending statements line up in the same columns in the source code.
4349 - Window already formatted
4350 - Window already typed
4351 - Writing output
4352 - Undefined symbol in GROUP
Can occur if an undefined symbol, such as an undefined indicator evaluation, is used as an argument for an entry_item.
4353 - Undefined symbol in ENTRY
4366 - Cannot Create Overloaded Name
Cause
Bad/undefined parameter type name used with overloaded method.
Resolution
The parameter data type listed is undefined.
Example
Incorrect Code:
Procedure Test Overloaded Integer arg1 MyDataType arg2
where MyDataType is not defined. This is typically caused by a typo of a valid data type or attempting to reference a data type before it has been defined.
4390 - Illegal method name definition
Cause
1a. This method was previously defined as non-overloaded.
- or -
1b. This method was previously defined as overloaded.
Resolution
- You cannot define a method with the same name as overloaded and non-overloaded. See Method Overloading about more information on this topic.
4391 - Illegal code placement
Cause
This error means that some code was placed in a location where it is illegal, as defined in the DataFlex language. Examples of this include: - Nesting a class inside a method. - Nesting a method inside a method. - Placing a property declaration inside a method.
Resolution
Correct the illegal code placement. See the DataFlex Language Guide for language rules and syntax.
4392 - Invalid method syntax
- Missing keyword Returns on function declaration.
Example:
Function Foo
Integer iVoid
Function_Return iVoid
End_Function // Foo
The above function declaration is missing the Returns keyword, as well as a return type:
Correct Code:
Function Foo
Returns Integer
Integer iVoid
Function_Return iVoid
End_Function // Foo
- Missing return type after keyword Returns on function declaration.
Example:
Function Foo Returns
Integer iVoid
Function_Return iVoid
End_Function // Foo
The above function declaration is missing the return type following the Returns keyword:
Correct Code:
Function Foo Returns
Integer
Integer iVoid
Function_Return iVoid
End_Function // Foo
4393 - Invalid message syntax
This error message can be caused by various types of invalid message syntax. Please read the text or the error message for the specific cause and/or resolution.
4394 - Invalid object reference
This error message can be caused by various types of invalid message syntax. Please read the text or the error message for the specific cause and/or resolution.
4394 - Invalid object reference OBJECT .NOT. YET DEFINED
Cause
Attempt to reference an object that has not yet been defined in the code. This can be caused by:
- Referencing an object that will be declared later in the code.
- Referencing an object that does not exist in the code.
Resolution
- Either declare the object before the code that declares this error or use Register_Object to declare the object to be declared later in the compilation.
- You may have mistyped the object name or mistakenly addressed the wrong object.
4395 - Obsolete command is unsupported
Cause
Attempt to use an obsolete command that is no longer supported in DataFlex.
Resolution
Look up the command in question in the Language Reference's Obsolete section and replace it with the recommended non-obsolete method.
4396 - Invalid argument
This error message can be caused by various types of invalid arguments. Please read the text or the error message for the specific cause and/or resolution.
4397 - Illegal external function definition
Cause
This error message means that the External_Function name is already used as an internal function name.
Resolution
Change the External_Function name.
4501 - Incompatible Debug Information
Cause
The .DBG was compiled in a different revision of DataFlex.
Resolution
Recompile the program so that the .EXE and .DBG files are from the same revision of DataFlex.
4507 - Missing Array Indexer in Reference
Cause
Too few array indexers specified while attempting to reference an individual element. For example, only the first dimension was specified while attempting to access an individual element of a two-dimensional array.
Resolution
Address the array with the correct number of indexers (e.g., 2 for a two-dimensional array).
4514 - Obsolete or ambiguous syntax: "Can be array indexer or indicator. Left of '[' is not an array, use '(' if indicator"
Cause
This error occurs if left of [ is a variable reference but determined not to evaluate to type array. It can also occur if what's between [] is an indicator, and it's simply a case of two arguments. In which case, you can resolve this by enclosing the indicator with () instead.
Resolution
Example:
Procedure Foo integer iCustNumber Boolean bIsFound
:
End_Procedure
Procedure CallFoo
open Customer
find gt Customer by 1
if (Found) begin
indicate GotIt as (Customer.Status = "Active")
send Foo Customer.Number [GotIt]
end
End_Procedure
The above function call to Foo sends [GotIt], which will result in this error. The correct way to reference an indicator's value is to place it in parentheses, as shown below:
Correct Code:
Procedure Foo integer iCustNumber Boolean bIsFound
:
End_Procedure
Procedure CallFoo
Boolean bGotIt
open Customer
find gt Customer by 1
if (Found) begin
if (Customer.Status = "Active") ;
move True to bGotIt
else ;
move False to bGotIt
send Foo Customer.Number bGotIt
end
End_Procedure
4514 - Obsolete or ambiguous syntax: "Left of '.' is not of type struct or table"
Cause
This error occurs if left of . is a variable reference but determined not to evaluate to type struct or table column.
Resolution
Correct the incorrect syntax. Variables cannot contain a period character unless it is followed by a struct member or table column name.
4531 - Obsolete String Command
Cause
This error occurs if an obsolete string command is used. It will be followed by details about the obsolete command and what to use as a replacement.
The help for any obsolete command (obsolete commands cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4532 - Obsolete Type Command
Cause
This error occurs if an obsolete type command is used. It will be followed by details about the obsolete command and what to use as a replacement.
The help for any obsolete command (obsolete commands cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4533 - Obsolete Command
Cause
This error occurs if an obsolete command is used. It will be followed by details about the obsolete command and what to use as a replacement.
The help for any obsolete command (obsolete commands cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4534 - Obsolete Global Function
Cause
This error occurs if an obsolete global function is used. It will be followed by details about the obsolete function and what to use as a replacement.
The help for any obsolete function (obsolete functions cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4535 - Obsolete Technique
Cause
This error occurs if an obsolete technique is used. It will be followed by details about the obsolete technique and what to use as a replacement.
The help for any obsolete command (obsolete commands cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4536 - Obsolete Package
Cause
This error occurs if an obsolete package is used. It will be followed by details about the obsolete package and what to use as a replacement.
The help for any obsolete code will list more details regarding what to replace it with. Obsolete packages may be listed in the Class Reference, but labeled as obsolete.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4537 - Obsolete Class
Cause
This error occurs if an obsolete class is used. It will be followed by details about the obsolete class and what to use as a replacement.
The help for any obsolete code will list more details regarding what to replace it with. Obsolete classes may be listed in the Class Reference, but labeled as obsolete.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4538 - Obsolete Indicator Use
Cause
This error occurs if an obsolete indicator-related code is used. It will be followed by details about the obsolete code and what to use as a replacement.
The help for any obsolete code (obsolete commands cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. For example, the Indicator command help gives a quick overview of obsolete indicator code use and how to update it.
A complete list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.
4539 - Illegal Type Conversion
Cause
This error occurs when code is found that could result in a runtime error due to an illegal data type conversion.
Resolution
Correct the code to match the data type being passed.
4540 - Obsolete Global Object Function
Cause
This error occurs if an obsolete global function is used. It will be followed by details about the obsolete function and what to use as a replacement.
The help for any obsolete function (obsolete functions cannot be found in the help index, but can be found via the help's search) will list more details regarding what to replace it with. A list of obsolete commands, functions, and symbols can be found here.
Resolution
Update the obsolete code with a suitable replacement. You can also use the compiler warning system to filter or ignore warnings. This is useful if you need to delay the replacement of obsolete code or want to focus on replacing specific obsolete code.