BUG: Wrong Namespace Member Selected for Qualified ID

ID: Q167321


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


SYMPTOMS

The wrong member function is called if you:

  • define a class with the same name, in different scopes;


  • create a temporary object, as shown in the sample, of that class type;


  • call a member function of that class.


See the MORE INFORMATION section for a sample that demonstrates the problem and the workaround.


RESOLUTION

Do not create a temporary object. Instead create a local object, and then call the member functions through the local object.


STATUS

Microsoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article.


MORE INFORMATION

The following sample demonstrates the problem and the workaround.

Sample Code


/*
Compile Options: /GX
*/ 
# include <iostream>
using namespace std ;

struct CMyClass
{
   virtual void DoSomething()
   {
      cout << "::CMyClass::DoSomething()\n";
   }
};

namespace MyNameSpace
{
   struct CMyClass
   {
      virtual void DoSomething()
      {
         cout << "MyNameSpace::CMyClass::DoSomething()\n";
      }
   };
}

int main()
{
   MyNameSpace::CMyClass().DoSomething() ;
   // Workaround: Comment the line above,
   // Uncomment the following lines
   // MyNameSpace::CMyClass C1 ;
   // C1.DoSomething();
   return 0;
} 

Additional query words: namespace

Keywords : kbcode kbCompiler kbCPPonly kbLangCPP kbVC kbVC500bug kbVC600bug
Version : winnt:5.0,6.0
Platform : winnt
Issue type : kbbug


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