Microsoft KB Archive/167966

From BetaArchive Wiki
Knowledge Base


Article ID: 167966

Article Last Modified on 7/5/2005



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 Q167966

SYMPTOMS

When you create a static object created in a friend function, it is denied access to protected members of a class and compiler error C2248 appears as follows:

'member' : cannot access protected member declared in class 'class'

RESOLUTION

Create the static object using the new operator.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are 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

   #include <iostream>

   //#define WORKAROUND //Uncomment this line for workaround

   class A
   {
   protected:
   A() { std::cout << "A()" << std::endl ;}
   ~A() { std::cout << "~A()" << std::endl ;};

   friend A* GetA();
   };

   A* GetA()
   {
   #ifndef WORKAROUND

     static A a ;
     return &a ;

   #else

     static A *pA = new A;
     return pA;

   #endif
   }

   void main()
   {
    A *pA = GetA() ;
   }
                

Keywords: kbbug kbfix kbnoupdate kbcode KB167966