FIX: C2682 Using dynamic_cast to Cast to a Const Pointer TypeLast reviewed: September 19, 1997Article ID: Q150576 |
The information in this article applies to:
SYMPTOMSWhen casting a const pointer of derived class to a const pointer of base class, the compiler generates the following error message:
C2682: cannot use dynamic_cast to convert from "'const class 'name1'*
to 'const class 'name2'*'"
where name1 and name2 refer to the names of your derived class and base
class respectively.
RESOLUTIONCast the derived class const pointer to a derived class non-const pointer. Then use the derived class non-const pointer in the dynamic_cast expression. See the MORE INFORMATION section of this article for sample code and a workaround.
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 INFORMATIONThe following sample code demonstrates the problem and generates the compiler error C2682. The workaround is shown in the comments in the sample code below.
Sample Code
#define WORKAROUND /* Uncomment this line to workaround */
class A
{
virtual void f() { } ;
} ;
class B : public A
{
} ;
void g(const B* pb)
{
#ifndef WORKAROUND
const A* pa = dynamic_cast<const A*>(pb) ;
#else
B* tmpBp = const_cast<B*>(pb) ;
const A* pa = dynamic_cast<const A*>(tmpBp) ;
#endif
}
void main()
{
B bObj ;
const B* pb = &bObj ;
g(pb) ;
}
Keywords : CLIss vcbuglist400 vcfixlist500 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. |