PRB: C2129 Generated With Forward Reference Used in Prototype (114536)



The information in this article applies to:

  • Microsoft C/C++ for MS-DOS 7.0
  • Microsoft Visual C++ 1.0
  • Microsoft Visual C++ 1.5
  • Microsoft Visual C++, 32-bit Learning Edition 4.0
  • Microsoft Visual C++, 32-bit Professional Edition 2.0
  • Microsoft Visual C++, 32-bit Professional Edition 4.0

This article was previously published under Q114536

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 ){}
				

Modification Type:MinorLast Reviewed:7/5/2005
Keywords:kbCompiler kbprb KB114536