Microsoft KB Archive/114536

= PRB: C2129 Generated With Forward Reference Used in Prototype =

Article ID: 114536

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft C/C++ Professional Development System 7.0
 * Microsoft Visual C++ 1.0 Professional Edition
 * Microsoft Visual C++ 1.5 Professional Edition
 * Microsoft Visual C++ 5.0 Learning Edition
 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 4.0 Professional Edition

-



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

Additional query words: 8.00 8.00c 9.00

Keywords: kbprb kbcompiler KB114536

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.