Microsoft KB Archive/151167

= BUG: LNK2001 Error for Static Member in Class Template =

Article ID: 151167

Article Last Modified on 12/2/2003

-

APPLIES TO


 * Microsoft Visual C++ 2.0 Professional Edition
 * Microsoft Visual C++ 2.1
 * Microsoft Visual C++ 2.2
 * Microsoft Visual C++ 4.0 Standard Edition
 * Microsoft Visual C++ 4.1 Subscription
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Professional Edition

-



This article was previously published under Q151167



SYMPTOMS
Linker error LNK2001 is generated for static member variables of nested classes in class templates. The message states:

error LNK2001: unresolved external symbol "public: static int Outer ::Inner::sobj"(?sobj@Inner@?$Outer@H@@2HA)



RESOLUTION
Do not use static member variables in nested classes of class templates.



STATUS
Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.



MORE INFORMATION
The sample code below gives the error message LNK2001.

Sample Code
/* Compile options needed: none

template class Outer { public: static T souter;

class Inner {   public: static T sobj; }; };

template  double Outer ::souter = 1;

template  int Outer ::Inner::sobj = 5;

void main {   double dval = Outer ::souter;

int i = Outer ::Inner::sobj; }

Additional query words: kbVC400bug

Keywords: kbbug kbcpponly kbcompiler KB151167

-

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

© Microsoft Corporation. All rights reserved.