Q34813: "Type Not Defined" after Saving Program in QB.EXE; Use AS ANY
Article: Q34813
Product(s): See article
Version(s): 4.00 4.00b 4.50
Operating System(s): MS-DOS
Keyword(s): ENDUSER | B_BasicCom | mspl13_basic
Last Modified: 16-DEC-1989
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:
1. 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)
2. 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
3. Choose Start from the Run menu to show that the program runs
correctly.
4. 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)
5. 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.)
6. 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)
THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.
Copyright Microsoft Corporation 1986-2002.