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: | Minor | Last Reviewed: | 7/5/2005 |
---|
Keywords: | kbCompiler kbprb KB114536 |
---|
|