Microsoft KB Archive/151167: Difference between revisions
From BetaArchive Wiki
m (Text replacement - "<" to "<") |
m (Text replacement - ">" to ">") |
||
Line 55: | Line 55: | ||
<div class="errormessage"> | <div class="errormessage"> | ||
error LNK2001: unresolved external symbol "public: static int Outer<int | error LNK2001: unresolved external symbol "public: static int Outer<int>::Inner::sobj"(?sobj@Inner@?$Outer@H@@2HA) | ||
</div> | </div> | ||
Line 84: | Line 84: | ||
*/ | */ | ||
template<class T | template<class T> class Outer | ||
{ | { | ||
public: | public: | ||
Line 96: | Line 96: | ||
}; | }; | ||
template <class T | template <class T> double Outer<double>::souter = 1; | ||
template <class T | template <class T> int Outer<int>::Inner::sobj = 5; | ||
void main() | void main() | ||
{ | { | ||
double dval = Outer<double | double dval = Outer<double>::souter; | ||
int i = Outer<int | int i = Outer<int>::Inner::sobj; | ||
} | } | ||
</pre> | </pre> |
Revision as of 18:50, 20 July 2020
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:
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 T> class Outer { public: static T souter; class Inner { public: static T sobj; }; }; template <class T> double Outer<double>::souter = 1; template <class T> int Outer<int>::Inner::sobj = 5; void main() { double dval = Outer<double>::souter; int i = Outer<int>::Inner::sobj; }
Additional query words: kbVC400bug
Keywords: kbbug kbcpponly kbcompiler KB151167