FIX: C2065 When Default Constructor of a Nested Class Called

ID: Q168373


The information in this article applies to:
  • Microsoft Visual C++, 32-bit Editions, version 5.0


SYMPTOMS

When the default constructor of a nested class gets called, it causes the C2065 compiler error:

'identifier' : undeclared identifier


RESOLUTION

Please see the MORE INFORMATION section for a workaround.


STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.This problem was corrected in Microsoft Visual C++ version 6.0.


MORE INFORMATION

NOTE: Because constructors do not have names, they are never found during name lookup; however an explicit type conversion using the functional notation causes a constructor to be called to initialize an object. (This information came from the C++ Working Paper.)

The following sample code demonstrates the problem and the workaround.

Sample Code


   /*
   Compile options: None
   */ 

   class Base
   {
   public:

       class Common
       {
       public:
          Common(){};
       };
       class Derived : public Common
       {
       public:
          Derived() {}
          Derived(int n) {}
       };
       Base( const Common &theCommon) {}
   };

   int main(void)
   {
       Base B1(Base::Derived());  //C2065 here

       // Workaround: Comment the above line
       // Uncomment the following lines
       // Base::Derived D ;
       // Base B1(D) ;
       return 0;
   } 

Additional query words:

Keywords : kbcode kberrmsg kbtool kbVC500bug kbVC600fix
Version : winnt:5.0
Platform : winnt
Issue type : kbbug


Last Reviewed: March 27, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.