FIX: C2985 Error When Template Class Has Static Data Member (135536)
The information in this article applies to:
- Microsoft Visual C++ 2.0
- Microsoft Visual C++ 2.1
- Microsoft Visual C++ 2.2
This article was previously published under Q135536 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.
| Modification Type: | Major | Last Reviewed: | 10/24/2003 |
|---|
| Keywords: | kbArtTypeINF kbbug kbfix kbLangCPP KB135536 |
|---|
|