Microsoft KB Archive/149784

= FIX: LNK2001 Incorrectly Generated for Static Data Member =

Article ID: 149784

Article Last Modified on 7/5/2005

-

APPLIES TO


 * Microsoft Visual C++ 4.0 Standard Edition

-



This article was previously published under Q149784



SYMPTOMS
When declaring static members of C++ classes, you must initialize the static data member. Otherwise the linker generates an unresolved external error message. Visual C++ 4.0 incorrectly generates such an unresolved external error message if a storage-class specifier (such as __declspec(X)) is used on the initialization line of a static data member.



CAUSE
Storage-class specifiers, such as __declspec, are only necessary for declarations. They are not needed (but are not wrong) otherwise.



RESOLUTION
Remove the storage-class specifier.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This problem has been corrected in Microsoft Visual C++ version 4.1.



MORE INFORMATION
Earlier versions of Visual C++ generated the following error when a storage- class specifier is used on the initialization line:

C:test.cpp('line') : error C2720: 'idata' : '' storage-class specifier illegal on members

where 'line' is the line of code where the initialization takes place, and 'idata' is the name of the static data member. Visual C++ no longer generates the C2720 error (correctly so). The following sample code demonstrates the problem.

Sample Code
/* Compile options needed: none


 * 1) include 
 * 2) include 

class A { public: static __declspec(thread) int idata; void test(void); }; __declspec(thread) int A::idata = 2;  // remove this __declspec(thread) to                                       // eliminate unresolved external error

void A::test(void) { cout<<idata; } void main(void) { A theA; theA.test; }

Additional query words: 4.00 lnk2001 lnk1120 L2029 unresolved external LINK

Keywords: kbbug kbfix kbcpponly kbcompiler KB149784

-

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

© Microsoft Corporation. All rights reserved.