Microsoft KB Archive/167321

From BetaArchive Wiki

Article ID: 167321

Article Last Modified on 12/10/2003



APPLIES TO

  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++ 6.0 Standard Edition



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


Additional query words: namespace

Keywords: kbbug kbfix kbnoupdate kblangcpp kbcpponly kbcode kbcompiler KB167321