Article: Q135536
Product(s): Microsoft C Compiler
Version(s): 2.00 2.10 2.20
Operating System(s):
Keyword(s): kbGenInfo kbLangCPP kbVC kbArtTypeINFkbbuglist kbfixlist
Last Modified: 02-AUG-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- Microsoft Visual C++, versions 2.0, 2.1, 2.2
-------------------------------------------------------------------------------
SYMPTOMS
========
A template class that contains a static data member of a type that was not
pre-defined, such as a struct or a class, causes this error:
C2985 <var name> : invalid static data member; template class < template
class name> already has a function member of the same name.
This error occurs on the line where the static data member is externally
declared.
RESOLUTION
==========
Explicitly initialize the static data member when it is declared. This may
require adding a constructor to the structure (see the sample code).
STATUS
======
Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article. This bug was corrected in Microsoft Visual C++,
32-bit Edition, version 4.0.
Sample Code
-----------
/* Compile options needed: None (compiler defaults will do)
*/
struct A {
// A() {} // ctor added for explicit initialization
void some_funct(){}
};
template <class T> struct B {
static A static_member;
void func() { static_member.some_funct(); }
};
// error will occur on the following line:
template <class T> A B<T>::static_member /* = A() */ ;
void main()
{
B<int> b;
b.func();
}
This code, as shown, generates the error. To work around the problem, change the
line where A() is declared and defined from a comment into an executed line, and
do the same for the = A() on the line where the error is occurring. This
explicitly initializes the data member when it is declared.
Additional query words: 2.00 2.10 2.20 9.0 9.00 9.1 9.10 visualc VC cl
======================================================================
Keywords : kbGenInfo kbLangCPP kbVC kbArtTypeINF kbbuglist kbfixlist
Technology : kbVCsearch kbAudDeveloper kbVC220 kbVC200 kbVC210
Version : 2.00 2.10 2.20
Issue type : kbbug
Solution Type : kbfix
=============================================================================