KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

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.