FIX: Wrong Namespace Member Selected for Qualified ID (167321)



The information in this article applies to:

  • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
  • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
  • Microsoft Visual C++, 32-bit Professional Edition 5.0
  • Microsoft Visual C++, 32-bit Professional Edition 6.0
  • Microsoft Visual C++, 32-bit Learning Edition 6.0

This article was previously published under Q167321

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.

This problem was corrected in Microsoft Visual C++ .NET.

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;
}
				

Modification Type:MajorLast Reviewed:12/10/2003
Keywords:kbBug kbcode kbCompiler kbCPPonly kbfix kbLangCPP kbNoUpdate KB167321