Why would the conversion between derived* to base* fails with private inheritance?

Bruce picture Bruce · Sep 9, 2010 · Viewed 24.1k times · Source

Here is my code -

#include<iostream>
using namespace std;

class base
{
public:
    void sid()
    {
    }  
};

class derived : private base
{
public:
    void sid()
    {
    }
};

int main()
{
    base * ptr;
    ptr = new derived; // error: 'base' is an inaccessible base of 'derived'
    ptr->sid();
    return 0;
}

This gives a compile time error.

error: 'base' is an inaccessible base of 'derived'

Since the compiler will try and call the base class sid() why do I get this error? Can someone please explain this.

Answer

Douglas Leeder picture Douglas Leeder · Sep 9, 2010

I suspect the problem is that you can't convert a derived pointer to a base pointer, as the inheritance is private.