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