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