FIX: Ambiguous C2966 Error with Nested Template ClassesLast reviewed: September 18, 1997Article ID: Q139458 |
The information in this article applies to:
SYMPTOMS An ambiguous C2966 error is generated if any members of a nested template class are defined externally. The sample code shown in the "More Information" section of this article reproduces this problem and gives the following error message:
error C2966: '<Unknown>' : adding member function of same name as existing static data member for template class 'Outer' RESOLUTIONDefine members of a nested template class inline only. NOTE: external definitions with the inline keyword will still generate the ambiguous C2966 error.
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.
MORE INFORMATION
Sample Code to Reproduce Problem
// Compile option needed: none template<class T> class Outer { public: class Inner { public: static T sobj; static T smfunc(T arg); }; }; //Initialize nested class static object template <class T> T Outer<T>::Inner::sobj = T(); // Out-of-line definition of nested class static member function // Moving this definition inside class resolves the error template <class T> T Outer<T>::Inner::smfunc(T arg) { return arg + sobj; } |
Additional query words: 10.00 10.10 10.20
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |