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. |