Article: Q114536
Product(s): Microsoft C Compiler
Version(s): 1.0,1.5,2.0,4.0,7.0
Operating System(s):
Keyword(s): kbCompiler
Last Modified: 11-FEB-2002
-------------------------------------------------------------------------------
The information in this article applies to:
- The C/C++ Compiler (CL.EXE), included with:
- Microsoft C/C++ for MS-DOS, version 7.0
- Microsoft Visual C++, versions 1.0, 1.5
- *EDITOR Please do not choose this product*Microsoft Visual C++ 32-bit Edition* use 241, 265, 225, versions 1.0, 2.0, 4.0
-------------------------------------------------------------------------------
SYMPTOMS
========
Compiling a C++ source file which uses a forward reference to a struct in a
function prototype will cause the compiler to generate the following error:
error C2129: static function 'Function' declared but not defined
The sample code shown below can be used to illustrate this problem. Note: the
error does not occur if the same file is compiled as a C source file.
CAUSE
=====
This is by design. In C++, a tag not previously seen is entered in the current
scope. In the sample code, the ForwardRef appearing in the parameter list is a
different struct than the one defined afterwards.
RESOLUTION
==========
To resolve this problem, move the declaration of the struct so that it is
located before the function prototype.
Sample Code
-----------
/* Compile options needed: /Tp to force this to be compiled as a C++
* source file.
*/
static void Function( int i, struct ForwardRef * frPtr );
// To work around this problem place the following declaration before
// the Function prototype.
struct ForwardRef
{
int data;
};
void main( void )
{
struct ForwardRef *frPtr;
int j;
Function( j, frPtr );
}
static void Function( int i, struct ForwardRef *frPtr ){}
Additional query words: 8.00 8.00c 9.00
======================================================================
Keywords : kbCompiler
Technology : kbVCsearch kbAudDeveloper kbCVCComp
Version : :1.0,1.5,2.0,4.0,7.0
Issue type : kbprb
=============================================================================