I have a dynamic cast that does not work. The layout of the class is as follows:
class A1
{
public:
virtual int foo1()=0;
};
class A2
{
public:
virtual int foo2();
};
class A3
{
public:
virtual int foo3();
};
class B : public A1, public A2, public A3
{
int bar();
};
Now I use pointers (so slicing cannot happen) for downcast.
main()
{
B b;
A1* a1 = dynamic_cast<A1*> (&b);
B* b1 = dynamic_cast<B*> (a1);
A2* a2_1 = dynamic_cast<A2*> (a1);
A2* a1_2 = dynamic_cast<A2*> (b1);
};
Killed works, upcast works, but sidecast does not always work. Sidecast works on OSX 10.7, but it doesn't work on OSX 10.9 (GCC 4.2 uses dynamic C ++ stdlib). Looking at vtable with gdb, I can clearly see how the methods and members of A2 are listed.
My questions:
a) sidecast? ?
b) sidecast , ? , ?
c) dynamic_cast ( ) ?
: ,
11/01/15 14: 16: 27,435 APPNAMECHANGED [15280]: dynamic_cast error 1: _ . . 10A1, 15A2.
, c) , , OSX 10.9. . (Linux, -?)
. (gcc.gnu.org/wiki/Visibility)
- . " ", , - - info ( ODR ++ - ). , , , typeinfos; typeinfo vtable , EH, , .
:
d) , , ? .o?