Microsoft KB Archive/34813
Article ID: 34813
Article Last Modified on 11/21/2006
- Microsoft QuickBasic 4.0
- Microsoft QuickBASIC 4.0b
- Microsoft QuickBasic 4.5 for MS-DOS
- Microsoft BASIC Compiler 6.0
- Microsoft BASIC Compiler 6.0b
- Microsoft BASIC Professional Development System 7.0
This article was previously published under Q34813
A user-defined variable type is defined with a TYPE...END TYPE statement. You must place a TYPE...END TYPE statement at the top of each separate module that uses that type.
Note that a "Type Not Defined" error occurs if a DECLARE statement mentions a user-defined type (y AS usertype) above the TYPE...END TYPE definition. This condition can occur after a Save in QB.EXE automatically adds a DECLARE statement (for a separately-loaded module) at the top of the main module.
To eliminate the "Type Not Defined" error, move the DECLARE statement below the TYPE...END TYPE statement, or change the type in the DECLARE statement to "ANY", as follows:
DECLARE SUB temp (y AS ANY)
This information applies to QuickBasic Versions 4.00 4.00b and 4.50, to Microsoft Basic Compiler Versions 6.00 and 6.00b for MS-DOS and MS OS/2, and to Microsoft Basic PDS Version 7.00 for MS-DOS and MS OS/2.
Note that if the SUBprogram is in the same module as the main program, AS ANY is automatically added in the DECLARE statement during a Save in QB.EXE, and the "Type not defined" error does not occur.
If the SUBprogram is in a different module (i.e., a separate source file) than the main program, a Save or Save All automatically adds a DECLARE statement in the main program, which can cause a "Type not defined" error, as shown in the following steps:
Run QB.EXE, enter the following program, and save it as TEST.BAS:
' This is the main module. TYPE config TROW AS INTEGER END TYPE DIM x AS config CALL temp(x)
Choose the Create File command from the File menu, enter the module name TEMP.BAS, and enter the following program: ' This is TEMP.BAS, a subprogram module in a separate disk file. TYPE config TROW AS INTEGER END TYPE
SUB temp (y AS config) STATIC PRINT "test" END SUB
- Choose Start from the Run menu to show that the program runs correctly.
Choose Save All from the File menu. During the Save, QB.EXE automatically adds a DECLARE statement in TEST.BAS as follows:
DECLARE SUB temp (y AS config) ' This is the main module. TYPE config TROW AS INTEGER END TYPE DIM x AS config CALL temp(x)
- Now, when you choose Start from the Run menu, the above DECLARE statement will give a "Type not defined" error. The error occurs because the DECLARE statement uses the "config" type before it has been defined (immediately below). (The compiler passes just once from top to bottom through the source to define variables.)
To eliminate the "Type not defined" error, move the DECLARE statement below the TYPE...END TYPE statement, or change "config" in the DECLARE statement to "ANY", as follows:
DECLARE SUB temp (y AS ANY)
Additional query words: QuickBas BasicCom