Conversion of pointer-to-pointer between derived and base classes?

Posted by Mike Mueller on Stack Overflow See other posts from Stack Overflow or by Mike Mueller
Published on 2010-03-28T09:25:32Z Indexed on 2010/03/28 9:33 UTC
Read the original article Hit count: 341

Filed under:
|
|

Regarding the following C++ program:

class Base { };

class Child : public Base { };

int main()
{   
    // Normal: using child as base is allowed
    Child *c = new Child();
    Base *b = c;

    // Double pointers: apparently can't use Child** as Base**
    Child **cc = &c;
    Base **bb = cc;

    return 0;
}

GCC produces the following error on the last assignment statement:

error: invalid conversion from ‘Child**’ to ‘Base**’

My question is in two parts:

  1. Why is there no implicit conversion from Child** to Base**?
  2. I can make this example work with a C-style cast or a reinterpret_cast. Using these casts means throwing away all type safety. Is there anything I can add to the class definitions to make these pointers cast implicitly, or at least phrase the conversion in a way that allows me to use static_cast instead?

© Stack Overflow or respective owner

Related posts about c++

Related posts about inheritance