继承和指针指针:为什么它不起作用,我该如何解决它?

Pie*_*rre 3 c++ inheritance pointers dynamic-cast

当我使用指向继承类的指针调用基类函数时,为什么会出现编译错误?

例:

class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {}  // base class
void func2(cFoo **) {}  // base class

void main(void)
{   cBar bar, *pbar;   // inherited class

    func1(&bar);   // compiles OK
    func2(&pbar);  // fail
    func2(dynamic_cast<cFoo**>(&pbar));  // 'class cFoo ** ' : invalid target type for dynamic_cast
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Tom*_*omW 6

考虑以下:

class cFoo {};
class cBar : public cFoo {};
void func1(cFoo *) {}
void func2(cFoo **p) { *p = new cFoo; }  // modify pointee

void main(void)
{   cBar bar, *pbar;   // inherited class

    func1(&bar);   // compiles OK

    func2(&pbar);
}
Run Code Online (Sandbox Code Playgroud)

如果这样可行,你可以设法将一个cFo​​o对象放入一个没有编译器错误的cBar指针中,并且类型系统将被破坏.动态演员无济于事,因为演员阵容无法阻止伤害.