FIX: C2440 Expanding Template with a Pointer to a Nested Class (149327)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
This article was previously published under Q149327 SYMPTOMS
At the point where a class template is expanded using a pointer to a nested
class, the compiler reports the following errors (generated by the sample
code listed in this article):
[FileName](14) : error C2440: 'initializing' : cannot convert from
'class A::B' to 'class A::B *' (new behavior; please see help)
[FileName](14) : error C2439: 't' : member could not be initialized
Lines 13 and 14 in the sample code are:
template <class T> C<T>::C() : t(T()) // error
{
RESOLUTION
There are three possible workarounds to this problem. Each is stated here
in terms of the sample code included in this article:
- Remove t(T()) from the initializer list and add t = T(); to the body of
the constructor. This workaround assumes there is an operator= defined
for class T.
- Change C<A::B *> c; to C<A::B&> c; or C<A::B> c:
- Change the definitions of class A and class B to that B is no longer
nested in the definition of A.
STATUSMicrosoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.
Modification Type: | Minor | Last Reviewed: | 7/5/2005 |
---|
Keywords: | kbBug kbfix kbVC600fix KB149327 |
---|
|