Microsoft KB Archive/167966

= FIX: C2248: Statics in Friends, No Access to Protected Members =

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

//#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

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.