FIX: C2243 on Friend Overload oLast reviewed: September 19, 1997Article ID: Q148688 |
The information in this article applies to:
SYMPTOMSThe following error is generated:
error C2243: 'abstract declarator' : conversion from 'class Derived *' to 'const class Base<Type> &' exists, but is inaccessiblein code that contains all of the following:
RESOLUTIONUse one of the following two workarounds to resolve the problem:
STATUSMicrosoft has confirmed this to be a bug in the Microsoft products listed at the beginning of this article. This bug was corrected in Visual C++ version 5.0.
MORE INFORMATION
Sample Code
/* Compile options needed: None
*/
#include <iostream.h>
template<class T>
class Base;
template<class T>
ostream& operator<<(ostream& s, const Base<T> & a)
{
return s;
}
template<class T>
class Base
{
public:
friend ostream& operator<<(ostream& s, const Base<T>& a);
};
class Derived;
ostream& operator<<(ostream& s, const Derived& a)
{
return s;
}
// Replace 'private' by 'public' in the following line
// to avoid the error (work around # 2)
class Derived : private Base<char> {
public:
friend ostream& operator<<(ostream& s, const Derived& a);
};
void main(void)
{
Derived objDerived;
// The C2243 error is generated for the following line.
// Uncomment the typecast to avoid the error (work around # 1)
cout << /*(const Derived&)*/ objDerived;
}
Keywords : CPPIss CPPLngIss vcbuglist400 vcfixlist500 kbprg Version : 4.0 4.1 4.2 Platform : NT WINDOWS Issue type : kbbug Solution Type : kbfix |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |